https://school.programmers.co.kr/learn/courses/30/lessons/250137

 

๋ฌธ์ œ

 

๋ฌธ์ œ ์„ค๋ช…

์–ด๋–ค ๊ฒŒ์ž„์—๋Š” ๋ถ•๋Œ€ ๊ฐ๊ธฐ๋ผ๋Š” ๊ธฐ์ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ•๋Œ€ ๊ฐ๊ธฐ๋Š” t์ดˆ ๋™์•ˆ ๋ถ•๋Œ€๋ฅผ ๊ฐ์œผ๋ฉด์„œ 1์ดˆ๋งˆ๋‹ค x๋งŒํผ์˜ ์ฒด๋ ฅ์„ ํšŒ๋ณตํ•ฉ๋‹ˆ๋‹ค. t์ดˆ ์—ฐ์†์œผ๋กœ ๋ถ•๋Œ€๋ฅผ ๊ฐ๋Š” ๋ฐ ์„ฑ๊ณตํ•œ๋‹ค๋ฉด y๋งŒํผ์˜ ์ฒด๋ ฅ์„ ์ถ”๊ฐ€๋กœ ํšŒ๋ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ์—๋Š” ์ตœ๋Œ€ ์ฒด๋ ฅ์ด ์กด์žฌํ•ด ํ˜„์žฌ ์ฒด๋ ฅ์ด ์ตœ๋Œ€ ์ฒด๋ ฅ๋ณด๋‹ค ์ปค์ง€๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์„ ์“ฐ๋Š” ๋„์ค‘ ๋ชฌ์Šคํ„ฐ์—๊ฒŒ ๊ณต๊ฒฉ์„ ๋‹นํ•˜๋ฉด ๊ธฐ์ˆ ์ด ์ทจ์†Œ๋˜๊ณ , ๊ณต๊ฒฉ์„ ๋‹นํ•˜๋Š” ์ˆœ๊ฐ„์—๋Š” ์ฒด๋ ฅ์„ ํšŒ๋ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชฌ์Šคํ„ฐ์—๊ฒŒ ๊ณต๊ฒฉ๋‹นํ•ด ๊ธฐ์ˆ ์ด ์ทจ์†Œ๋‹นํ•˜๊ฑฐ๋‚˜ ๊ธฐ์ˆ ์ด ๋๋‚˜๋ฉด ๊ทธ ์ฆ‰์‹œ ๋ถ•๋Œ€ ๊ฐ๊ธฐ๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๋ฉฐ, ์—ฐ์† ์„ฑ๊ณต ์‹œ๊ฐ„์ด 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

๋ชฌ์Šคํ„ฐ์˜ ๊ณต๊ฒฉ์„ ๋ฐ›์œผ๋ฉด ์ •ํ•ด์ง„ ํ”ผํ•ด๋Ÿ‰๋งŒํผ ํ˜„์žฌ ์ฒด๋ ฅ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์ด๋•Œ, ํ˜„์žฌ ์ฒด๋ ฅ์ด 0 ์ดํ•˜๊ฐ€ ๋˜๋ฉด ์บ๋ฆญํ„ฐ๊ฐ€ ์ฃฝ์œผ๋ฉฐ ๋” ์ด์ƒ ์ฒด๋ ฅ์„ ํšŒ๋ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ๋ถ•๋Œ€๊ฐ๊ธฐ ๊ธฐ์ˆ ์˜ ์ •๋ณด, ์บ๋ฆญํ„ฐ๊ฐ€ ๊ฐ€์ง„ ์ตœ๋Œ€ ์ฒด๋ ฅ๊ณผ ๋ชฌ์Šคํ„ฐ์˜ ๊ณต๊ฒฉ ํŒจํ„ด์ด ์ฃผ์–ด์งˆ ๋•Œ ์บ๋ฆญํ„ฐ๊ฐ€ ๋๊นŒ์ง€ ์ƒ์กดํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋ถ•๋Œ€ ๊ฐ๊ธฐ ๊ธฐ์ˆ ์˜ ์‹œ์ „ ์‹œ๊ฐ„, 1์ดˆ๋‹น ํšŒ๋ณต๋Ÿ‰, ์ถ”๊ฐ€ ํšŒ๋ณต๋Ÿ‰์„ ๋‹ด์€ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด bandage์™€ ์ตœ๋Œ€ ์ฒด๋ ฅ์„ ์˜๋ฏธํ•˜๋Š” ์ •์ˆ˜ health, ๋ชฌ์Šคํ„ฐ์˜ ๊ณต๊ฒฉ ์‹œ๊ฐ„๊ณผ ํ”ผํ•ด๋Ÿ‰์„ ๋‹ด์€ 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด attacks๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณต๊ฒฉ์ด ๋๋‚œ ์งํ›„ ๋‚จ์€ ์ฒด๋ ฅ์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”. ๋งŒ์•ฝ ๋ชฌ์Šคํ„ฐ์˜ ๊ณต๊ฒฉ์„ ๋ฐ›๊ณ  ์บ๋ฆญํ„ฐ์˜ ์ฒด๋ ฅ์ด 0 ์ดํ•˜๊ฐ€ ๋˜์–ด ์ฃฝ๋Š”๋‹ค๋ฉด -1์„ return ํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ ์‚ฌํ•ญ

  • bandage๋Š” [์‹œ์ „ ์‹œ๊ฐ„, ์ดˆ๋‹น ํšŒ๋ณต๋Ÿ‰, ์ถ”๊ฐ€ ํšŒ๋ณต๋Ÿ‰] ํ˜•ํƒœ์˜ ๊ธธ์ด๊ฐ€ 3์ธ ์ •์ˆ˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • 1 ≤ ์‹œ์ „ ์‹œ๊ฐ„ = t ≤ 50
  • 1 ≤ ์ดˆ๋‹น ํšŒ๋ณต๋Ÿ‰ = x ≤ 100
  • 1 ≤ ์ถ”๊ฐ€ ํšŒ๋ณต๋Ÿ‰ = y ≤ 100
  • 1 ≤ health ≤ 1,000
  • 1 ≤ attacks์˜ ๊ธธ์ด ≤ 100
  • attacks[i]๋Š” [๊ณต๊ฒฉ ์‹œ๊ฐ„, ํ”ผํ•ด๋Ÿ‰] ํ˜•ํƒœ์˜ ๊ธธ์ด๊ฐ€ 2์ธ ์ •์ˆ˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • attacks๋Š” ๊ณต๊ฒฉ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  • attacks์˜ ๊ณต๊ฒฉ ์‹œ๊ฐ„์€ ๋ชจ๋‘ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
  • 1 ≤ ๊ณต๊ฒฉ ์‹œ๊ฐ„ ≤ 1,000
  • 1 ≤ ํ”ผํ•ด๋Ÿ‰ ≤ 100

 

์ž…์ถœ๋ ฅ ์˜ˆ

bandage health attacks result
[5, 1, 5] 30 [[2, 10], [9, 15], [10, 5], [11, 5]] 5
[3, 2, 7] 20 [[1, 15], [5, 16], [8, 6]] -1
[4, 2, 7] 20 [[1, 15], [5, 16], [8, 6]] -1
[1, 1, 1] 5 [[1, 2], [3, 2]] 3

 

 

 

์†Œ์Šค ์ฝ”๋“œ
def solution(bandage, health, attacks):
    t, x, y = bandage
    max = health
    success = 0

    # ๊ณต๊ฒฉ ๋‹นํ•œ ์‹œ๊ฐ„ ๊ตฌํ•˜๊ธฐ
    attack_times = []
    for attack in attacks:
        attack_times.append(attack[0])

    # ๋งˆ์ง€๋ง‰ ๊ณต๊ฒฉ๊นŒ์ง€ ์ƒ์กด์—ฌ๋ถ€ ํ™•์ธ
    for now in range(1,attack_times[-1]+1):
        # ๊ณต๊ฒฉ ๋‹นํ•˜๋ฉด ์ฒด๋ ฅ๊ฐ์†Œ ๋ฐ ์—ฐ์†์„ฑ๊ณต ์ดˆ๊ธฐํ™”
        if now in attack_times:
            idx = attack_times.index(now)
            health -= attacks[idx][1]
            success = 0

            # ๊ณต๊ฒฉ ๋‹นํ•ด์„œ ์ฒด๋ ฅ์ด ๋ฐ”๋‹ฅ๋‚˜๋Š” ๊ฒฝ์šฐ
            if health <= 0:
                return -1
                break

        # ๊ณต๊ฒฉ ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด ๋ถ•๋Œ€์Šคํ‚ฌ
        else:
            # ์ฒด๋ ฅ์ด ์ตœ๋Œ€์น˜๋ณด๋‹ค ์ž‘์œผ๋ฉด ํšŒ๋ณต / ์ตœ๋Œ€์น˜์ด๊ฑฐ๋‚˜ ํฌ๋ฉด ์ตœ๋Œ€์น˜๋กœ ์ดˆ๊ธฐํ™”
            # ๋ชฌ์Šคํ„ฐ์˜ ๊ณต๊ฒฉ์„ ๋ฐ›์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์—ฐ์† ์„ฑ๊ณต
            if health < max:
                health += x
            else:
                health = max

            success += 1
            if success == t:
                health += y
                success = 0    

    return health

 

ํ’€์ด

  • ๋ถ•๋Œ€๊ฐ๊ธฐ ์Šคํ‚ฌ ๋ฆฌ์ŠคํŠธ์—์„œ ์‹œ์ „ ์‹œ๊ฐ„, ์ดˆ๋‹น ํšŒ๋ณต๋Ÿ‰, ์ถ”๊ฐ€ ํšŒ๋ณต๋Ÿ‰ ์„ค์ •
    • t = ์‹œ์ „ ์‹œ๊ฐ„ (๋ถ•๋Œ€๊ฐ๊ธฐ ์Šคํ‚ฌ์˜ ์ตœ๋Œ€ ์ง„ํ–‰์‹œ๊ฐ„)
    • x = ์ดˆ๋‹น ํšŒ๋ณต๋Ÿ‰ (1์ดˆ๋™์•ˆ ํšŒ๋ณต๋Ÿ‰)
    • y = ์ถ”๊ฐ€ ํšŒ๋ณต๋Ÿ‰ (t์‹œ๊ฐ„๋งŒํผ ๋ถ•๋Œ€๊ฐ๊ธฐ ์Šคํ‚ฌ์„ ์„ฑ๊ณตํ•  ๊ฒฝ์šฐ ์ถ”๊ฐ€ ํšŒ๋ณต)
  • ์ฒด๋ ฅ์˜ ์ตœ๋Œ€์น˜ max, ์—ฐ์†์„ฑ๊ณต ํšŸ์ˆ˜ succes ์„ค์ •
  • ๋ชฌ์Šคํ„ฐ์—๊ฒŒ ๊ณต๊ฒฉ๋‹นํ•œ ์‹œ๊ฐ„์„ attack_times์— ์ถ”๊ฐ€
  • ๋งˆ์ง€๋ง‰ ๊ณต๊ฒฉ์‹œ๊ฐ„๊นŒ์ง€ for๋ฌธ์„ ๋Œ๋ฉด์„œ ๊ณต๊ฒฉ์—ฌ๋ถ€ ํ™•์ธ
    • ํ˜„์žฌ ์‹œ๊ฐ„์ด ๊ณต๊ฒฉ๋‹นํ•œ ์‹œ๊ฐ„ attack_times์— ์žˆ์œผ๋ฉด ์ฒด๋ ฅ๊ฐ์†Œ ๋ฐ ์—ฐ์†์„ฑ๊ณต ์ดˆ๊ธฐํ™”
      • ๊ณต๊ฒฉ์„ ๋‹นํ•ด์„œ ์ฒด๋ ฅ์ด 0๋ณด๋‹ค ์ž‘์•„์ง€๋ฉด -1์„ ๋ฆฌํ„ดํ•˜๊ณ  ์ข…๋ฃŒ
    • ๊ณต๊ฒฉ๋‹นํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๋ถ•๋Œ€๊ฐ๊ธฐ๋กœ ์ฒด๋ ฅ ํšŒ๋ณต
      • ์ฒด๋ ฅ์ด max๋ณด๋‹ค ์ž‘์œผ๋ฉด ํšŒ๋ณตํ•˜๊ณ  max๋ณด๋‹ค ํฌ๋ฉด max๋กœ ์ดˆ๊ธฐํ™”
      • ์—ฐ์† ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ํšŒ๋ณต

 

 

์กฐ๊ฑด์ด ๋งŽ๊ธด ํ•œ๋ฐ ๋ณต์žกํ•˜์ง€๋Š” ์•Š์•„์„œ ํ•˜๋‚˜์”ฉ ์ƒ๊ฐํ•˜๋ฉด์„œ ํ‘ธ๋‹ˆ๊นŒ ์˜์™ธ๋กœ ๊ธˆ๋ฐฉ ํ’€๋ฆฐ ๋ฌธ์ œ์˜€๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค๋Š” ์žฌ๋ฏธ์žˆ๋Š” ๋ฌธ์ œ ์ƒํ™ฉ์ด ๋งŽ์•„์„œ ์ข‹๋‹ค..ใ…Žใ…Ž....

+ Recent posts