๐ ๋ฌธ์ ์ค๋ช
์ด๋ค ๊ฒ์์๋ ๋ถ๋ ๊ฐ๊ธฐ๋ผ๋ ๊ธฐ์ ์ด ์์ต๋๋ค.
๋ถ๋ ๊ฐ๊ธฐ๋ t์ด ๋์ ๋ถ๋๋ฅผ ๊ฐ์ผ๋ฉด์ 1์ด๋ง๋ค x๋งํผ์ ์ฒด๋ ฅ์ ํ๋ณตํฉ๋๋ค. t์ด ์ฐ์์ผ๋ก ๋ถ๋๋ฅผ ๊ฐ๋ ๋ฐ ์ฑ๊ณตํ๋ค๋ฉด y๋งํผ์ ์ฒด๋ ฅ์ ์ถ๊ฐ๋ก ํ๋ณตํฉ๋๋ค. ๊ฒ์ ์บ๋ฆญํฐ์๋ ์ต๋ ์ฒด๋ ฅ์ด ์กด์ฌํด ํ์ฌ ์ฒด๋ ฅ์ด ์ต๋ ์ฒด๋ ฅ๋ณด๋ค ์ปค์ง๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ธฐ์ ์ ์ฐ๋ ๋์ค ๋ชฌ์คํฐ์๊ฒ ๊ณต๊ฒฉ์ ๋นํ๋ฉด ๊ธฐ์ ์ด ์ทจ์๋๊ณ , ๊ณต๊ฒฉ์ ๋นํ๋ ์๊ฐ์๋ ์ฒด๋ ฅ์ ํ๋ณตํ ์ ์์ต๋๋ค. ๋ชฌ์คํฐ์๊ฒ ๊ณต๊ฒฉ๋นํด ๊ธฐ์ ์ด ์ทจ์๋นํ๊ฑฐ๋ ๊ธฐ์ ์ด ๋๋๋ฉด ๊ทธ ์ฆ์ ๋ถ๋ ๊ฐ๊ธฐ๋ฅผ ๋ค์ ์ฌ์ฉํ๋ฉฐ, ์ฐ์ ์ฑ๊ณต ์๊ฐ์ด 0์ผ๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
๋ชฌ์คํฐ์ ๊ณต๊ฒฉ์ ๋ฐ์ผ๋ฉด ์ ํด์ง ํผํด๋๋งํผ ํ์ฌ ์ฒด๋ ฅ์ด ์ค์ด๋ญ๋๋ค. ์ด๋, ํ์ฌ ์ฒด๋ ฅ์ด 0 ์ดํ๊ฐ ๋๋ฉด ์บ๋ฆญํฐ๊ฐ ์ฃฝ์ผ๋ฉฐ ๋ ์ด์ ์ฒด๋ ฅ์ ํ๋ณตํ ์ ์์ต๋๋ค.
๋น์ ์ ๋ถ๋๊ฐ๊ธฐ ๊ธฐ์ ์ ์ ๋ณด, ์บ๋ฆญํฐ๊ฐ ๊ฐ์ง ์ต๋ ์ฒด๋ ฅ๊ณผ ๋ชฌ์คํฐ์ ๊ณต๊ฒฉ ํจํด์ด ์ฃผ์ด์ง ๋ ์บ๋ฆญํฐ๊ฐ ๋๊น์ง ์์กดํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๋ถ๋ ๊ฐ๊ธฐ ๊ธฐ์ ์ ์์ ์๊ฐ, 1์ด๋น ํ๋ณต๋, ์ถ๊ฐ ํ๋ณต๋์ ๋ด์ 1์ฐจ์ ์ ์ ๋ฐฐ์ด bandage์ ์ต๋ ์ฒด๋ ฅ์ ์๋ฏธํ๋ ์ ์ health, ๋ชฌ์คํฐ์ ๊ณต๊ฒฉ ์๊ฐ๊ณผ ํผํด๋์ ๋ด์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด attacks๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ๋ชจ๋ ๊ณต๊ฒฉ์ด ๋๋ ์งํ ๋จ์ ์ฒด๋ ฅ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ๋ง์ฝ ๋ชฌ์คํฐ์ ๊ณต๊ฒฉ์ ๋ฐ๊ณ ์บ๋ฆญํฐ์ ์ฒด๋ ฅ์ด 0 ์ดํ๊ฐ ๋์ด ์ฃฝ๋๋ค๋ฉด -1์ return ํด์ฃผ์ธ์.
๐ค ๋ฌธ์ ํ์ด
attacks ๋ฆฌ์คํธ์ ์๋ ๊ณต๊ฒฉ ์๊ฐ๊ณผ ํผํด๋์ ๊ฐ๊ฐ ๋ฆฌ์คํธ๋ก ์ฌ๊ตฌ์ฑํ๊ณ , ๋ง์ง๋ง ๊ณต๊ฒฉ ์๊ฐ๊น์ง ๋ฐ๋ณต๋ฌธ์ ์ํํ๋ค.
1. ํ์ฌ ์๊ฐ์ด(idx)๊ฐ ๊ณต๊ฒฉ ์๊ฐ์ ํฌํจํ๋ค๋ฉด ํด๋น ํผํด๋ ๋งํผ ์ฒด๋ ฅ์ ๊ฐ์์ํจ๋ค.
2. ์ฒด๋ ฅ์ด 0์ดํ์ด๋ฉด -1์ ๋ฆฌํดํ๋ฉฐ, ๊ณต๊ฒฉ์ด ์ํ๋๊ธฐ ๋๋ฌธ์ ๋ถ๋ ์์ ์๊ฐ์ ์ด๊ธฐํํ๋ค. ๋ํ ํด๋น ์๊ฐ์ ์ฒด๋ ฅ ํ๋ณต๋ ์ด๋ค์ง์ง ์๋๋ค.
3. ๊ณต๊ฒฉ ์๊ฐ์ ํฌํจํ์ง ์๋๋ค๋ฉด, ์ด๋น ํ๋ณต๋๋งํผ ์ฒด๋ ฅ์ ํ๋ณตํ๊ณ ์์ ์๊ฐ์ด ์ฑ์์ก๋ค๋ฉด ์ถ๊ฐ ํ๋ณต์ ์งํํ๊ณ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
4. ํ๋ณต ํ ์ต๋ ์ฒด๋ ฅ์ ๋์ง ์๋๋ก ์ฒด๋ ฅ์ ์กฐ์ ํ๋ค.
๐ ํ์ด ์ฝ๋
def init_attack(attacks):
attack_time = []
damage = []
for attack in attacks:
attack_time.append(attack[0])
damage.append(attack[1])
return attack_time, damage
def solution(bandage, health, attacks):
max_health = health
attack_time, damage = init_attack(attacks)
last_attack_time = attacks[-1][0] + 1
bandage_cnt = 0
for idx in range(last_attack_time):
if idx in attack_time:
health -= damage[attack_time.index(idx)]
if health <= 0:
return -1
bandage_cnt = 0
continue
health += bandage[1]
bandage_cnt += 1
if bandage_cnt == bandage[0]:
health += bandage[2]
bandage_cnt = 0
health = min(max_health,health)
return health