Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- level 3
- 티스토리챌린지
- Dynamic Programming
- select
- 동적계획법
- 자바스크립트
- softeer
- dfs
- C언어
- DP
- bfs
- SQL
- programmers
- 너비 우선 탐색
- join
- SQL 고득점 KIT
- javascript
- Lv. 3
- Lv. 1
- 소프티어
- LEVEL 2
- Python
- 파이썬
- 프로그래머스
- group by
- Lv. 0
- 오블완
- Lv. 2
- Java
- 깊이 우선 탐색
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 1] [PCCP 기출문제] 1번 / 붕대 감기 {언어 : Python} 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/250137
정답 코드
def solution(bandage, health, attacks):
t, x, y = bandage
startHP = health
currentTime = 0
isAlived = True
# at : attack time || ad : attack damage
for at, ad in attacks:
# 일단 회복 시키고 때린다.
diffTime = at - currentTime - 1
startHP = min(health, startHP + (diffTime * x) + (diffTime // t) * y)
if startHP <= ad:
isAlived = False
break
else:
startHP -= ad
currentTime = at
answer = -1
if isAlived:
answer = startHP
return answer
풀이 방법
- 일단 회복을 먼저 시킨다.
- 회복시 고려할 점이 현재 시간이다.
- 현재 시간은 0으로 먼저 시작하고 현재 hp도 health로 최대 체력으로 시작한다.
- 공격을 받은 시점이 2초라고 하면 1초만 회복이 가능하다.
- 즉 공격을 받은 시점 에서 현재 시점을 뺀 다음 1을 빼야한다는 말이다.
- 회복시간을 계산하고 초당 회복량인 x를 곱한다.
- 추가 회복량은 회복시간을 시전 시간인 t로 나눈 후 y를 곱해주면 된다.
- 시전 시간이 5이고 회복 시간이 3인 경우 자연스럽게 0 * y가 되면서 추가 회복은 0이다.
- 추가 회복량은 회복시간을 시전 시간인 t로 나눈 후 y를 곱해주면 된다.
- 여기서 회복을 받은 현재의 hp가 최대 회복량을 넘었는지 비교하며 회복을 시킨다.
- min(health, startHP + 회복량)으로 하면 어떤 경우에서도 최대 체력인 health를 넘지 못하게 된다.
- 회복시 고려할 점이 현재 시간이다.
- 회복이 끝나면 공격을 받는다.
- 여기서 데미지가 현재 체력을 넘어서거나 같으면 hp가 0이하가 되므로 죽게 된다.
- isAlived를 False로 바꾸고 반복문을 종료시킨다.
- 반복문을 종료시키면 불필요한 연산을 줄일 수 있어 성능을 향상 시킬 수 있다.
- 당연하게도 hp가 많으면 데미지만큼 빼주면 된다.
- 여기서 데미지가 현재 체력을 넘어서거나 같으면 hp가 0이하가 되므로 죽게 된다.
- 마지막으로 살아있는지를 확인한다.
- 죽었으면 -1
- 살아있으면 startHP를 반환한다.
느낀점
- 쉬운 문제도 방심하지 않고 최선을 다해서 풀어야 한다.
'알고리즘' 카테고리의 다른 글
프로그래머스 [Lv. 1] 달리기 경주 {언어 : JavaScript} (0) | 2024.04.01 |
---|---|
프로그래머스 [Lv. 1] 가장 많이 받은 선물 {언어 : JavaScript} (1) | 2024.03.31 |
프로그래머스 [Lv. 3] 주사위 고르기 {언어 : JavaScript} (1) | 2024.03.29 |
프로그래머스 [Lv. 2] 석유 시추 {언어 : JavaScript} (0) | 2024.03.28 |
프로그래머스 [Lv. 3] 등굣길 {언어 : JavaScript} (0) | 2024.03.25 |