📘 문제
플랫폼: 프로그래머스
난이도: Lv1
유형: 시뮬레이션
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/250137
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
시뮬레이션 문제로 몬스터의 공격 정보, 회복 정보 등이 주어졌을 때 몬스터의 공격과 회복량을 계산해서 마지막 체력을 return 하는 문제
🧠 접근 방법 및 풀이 과정
문제에 나온대로 시뮬레이션을 돌려가면서 풀었다.
1차 코드
for t in range(last_attack_time + 1):
# 쥬금
if health <= 0:
return -1
# 공격 성공
if t in attack_info:
health -= attack_info[t]
heal_cnt = 0
continue
if health >= max_hp:
continue
# 회복
heal_cnt += 1
if heal_cnt == bandage[0]:
health += bandage[2]
health += bandage[1]
if health > max_hp: health %= max_hp
10분 만에 쉽게 테케를 전부 맞춰서 '역시 레벨 1이라 쉽군' 했는데
제출했더니 우수수 틀림 ㅋ..

일단 1가지 오류
연속 회복을 성공한 뒤 카운트를 초기화 시켜줘야 했는데 안해줬다
이걸 고쳤더니 40점으로 올라감
"질문하기"에서 찾은 반례로 문제를 해결 할 수 있었다
입력값 〉 [5, 3, 2], 30, [[1, 1], [4, 12]]
기댓값 〉 18
원래 코드에선 아래와 같이 최대 체력을 넘으면 현재 체력과 최대 체력을 나눈 나머지값을 갖게 했는데
if health > max_hp: health %= max_hp
그게 아니라 최대 체력을 넘으면 그냥 최대 체력을 가져야한다.
if health > max_hp: health = max_hp
이렇게 바꾸니까 정답됨
💻 코드 & 설명
from collections import defaultdict
def solution(bandage, health, attacks):
max_hp = health
last_attack_time = attacks[-1][0]
attack_info = defaultdict()
for time, damage in attacks:
attack_info[time] = damage
heal_cnt = 0
for t in range(last_attack_time + 1):
# 쥬금
if health <= 0:
return -1
# 공격 성공
if t in attack_info:
health -= attack_info[t]
heal_cnt = 0
continue
if health >= max_hp:
continue
# 회복
heal_cnt += 1
if heal_cnt == bandage[0]:
health += bandage[2]
heal_cnt = 0
health += bandage[1]
if health > max_hp: health = max_hp
return health if health > 0 else -1
✨ 회고 / 느낀 점
평소에 주석을 좋아하지 않는 편인데.. 시뮬레이션 문제에선 주석을 다는 것이 훨씬 편하다는 것을 느꼈다.
연습할 땐 "질문하기" 같은 도움 받을 수 있는 통로가 있지만 실전에선 없으니까 조건을 더 꼼꼼히 보고 혼자 문제를 해결하는 연습을 해야겠다
💭 요즘 문제 풀고 다른 사람 풀이 보는 것에 재미 들렸는데 이번 문제에서 좀 웃겼다 ㅋㅋㅋㅋ 엄준식씨 누구세요..?
그리고 12줄 만에 푼 사람도 있었는데 댓글에 "와 난 진짜 멍청이야..."라는 댓글이 있어서 나도 달았다
지금은 부끄러워서 지웠어요🙈

요즘 알고리즘 문제 푼 글에 여자 캐릭터 사진을 넣었는데 오늘은 귀여운 쿼카를 그려보았어요 🐨
디저트는 대리 만족을 위해 항상 넣는 편,,🫶🏻

'개발 > 알고리즘' 카테고리의 다른 글
| [프로그래머스] 과일 장수 Python 풀이 (1) | 2025.06.12 |
|---|---|
| [프로그래머스] 연속된 부분 수열의 합 Python 풀이 (2) | 2025.06.11 |
| [프로그래머스] 양궁대회 Python 풀이 (0) | 2025.06.09 |
| [프로그래머스] 무인도 여행 Python 풀이 (1) | 2025.06.06 |
| [프로그래머스] 다리를 지나는 트럭 Python 풀이 (1) | 2025.06.04 |