[PCCP 기출문제] 1번 / 붕대 감기
풀이
처음 문제를 보고 나서 느낀 점은 이거 문제로 받았으면, 제 시간 안에 풀 수 있었을까? 였다.
문제를 읽는 것과 정리하는 시간도 필요했고, 그에 따른 고민도 해야 했기 때문이다. 다행히 LV1이어서 적당하게 이렇게 하면 요롷게 되겠지 하고 푸니 풀렸지만, 그 이상 레벨이었으면?? 흐음..
일단 문제의 내용을 다시 정리하고, 그것을 토대로 작성을 했다.
시간은 계속 흐르고 시간에 대한 정의는 없었기에 for문 대신 while문으로 시간을 계속 흘려보냈다.
그리고 그 시신과 함께 공격 시간에 맞추어 공격이 이루어지는지를 확인하고,
공격이 없으면 체력을 회복하게 만들었다.
while문이 끝나는 시점은 마지막 공격이 이루어졌을 때가 끝나는 것이기 때문에 공격 시점에서 return값을 모두 주었고, 필요는 없지만, while문 바깥에도 return 값을 주었다.
공격을 받지 않으면, 붕대 감기로 붕대를 감으면서 이 시간을 재기로 했다. 예문을 보아하니 붕대를 감는 시점이 1초를 사용한다고 되어있어서, 바로 hill_timer += 1을 작성하였다. 이후는 문제 내용에 바탕으로 한 코드이다.
# 붕대 감기 t초동안 1초마다 x만큼의 체력 회복
# t초 연속 붕대를 감는 데 성공하면, y만큼의 체력을 추가로 회복
# 최대 체력이 있으므로, 현재 체력이 최대 체력을 넘을 수는 없음
# 공격당하면, 취소되며, 공격 당하느 순간 체력 회복불가능
# 기술이 끝나면 그 죽시 붕대 감기를 다시 사용, 연속 시간이 0으로 초기화
# 공격 받으면, 정해진 피해량 만큼 현재 체력 줄어듬. 0 이하가 되면 죽어서 체력회복 불가능
# bandage = [시전 시간, 초당 회복량, 추가 회복량]
# health = 최대 체력
# attacks = [[몬스터의 공격 시간, 피해량],[몬스터의 공격 시간, 피해량]]
# 모든 공격이 끝난 직후 남은 체력 return 죽으면, -1
def solution(bandage, health, attacks):
timer = 0
hill_timer = 0
a_i = 0
current_health = health
end_i = len(attacks)-1
# 계속 진행
while True:
timer += 1
# 공격받으면
if attacks[a_i][0] == timer:
hill_timer = 0
current_health -= attacks[a_i][1]
# 죽으면 -1 리턴
if current_health <= 0:
return -1
elif a_i == end_i:
return current_health
a_i += 1
continue
# 공격 안 받으면
else:
hill_timer += 1
current_health += bandage[1]
if hill_timer == bandage[0]:
current_health += bandage[2]
hill_timer = 0
if current_health > health:
current_health = health
return current_health
다른 사람 풀이
되게 풀이가 깔끔하다.
def solution(bandage, health, attacks):
hp = health
start = 1
for i, j in attacks:
hp += ((i - start) // bandage[0]) * bandage[2] + (i - start) * bandage[1]
start = i + 1
if hp >= health:
hp = health
hp -= j
if hp <= 0:
return -1
return hp
엄준식이라니.....
아니 여기도 엄준식이라니.. 어떻게 코드가 엄준식.
def solution(어떻게사람이름이, 엄준식, 어떻게):
엄, 준, 식 = 어떻게사람이름이
사람이름이=어엄=int(not ([]))
어떻게={준[어엄-어엄]:준[어엄] for 준 in 어떻게}
엄준식화이팅=엄준식
while 사람이름이<=max(어떻게.keys()):
target=사람이름이+엄
while 사람이름이<target:
if 사람이름이 in 어떻게.keys():
엄준식-=어떻게[사람이름이]
if 엄준식<=어엄-어엄:
return -어엄
break
엄준식+=준
if 엄준식>엄준식화이팅:
엄준식=엄준식화이팅
사람이름이+=어엄
else:
사람이름이-=어엄
엄준식+=식
if 엄준식>엄준식화이팅:
엄준식=엄준식화이팅
사람이름이+=어엄
return 엄준식
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv2 가장 큰 수 도움말 (python) (0) | 2024.02.15 |
---|---|
프로그래머스 Lv1 햄버거 만들기 (python) (1) | 2024.02.14 |
프로그래머스 Lv2 튜플 (python) (1) | 2024.02.13 |
프로그래머스 Lv1 공원 산책 (python) (0) | 2024.02.12 |
프로그래머스 Lv1 성격 유형 검사하기 (python) (1) | 2024.02.11 |