문제
https://school.programmers.co.kr/learn/courses/19344/lessons/242258
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
def solution(bandage, health, attacks):
max_health = health
t, x, y = bandage
end_time = attacks[-1][0]
cur_t = 0
cur_health = health
attacks_dic = dict(attacks)
for i in range(end_time + 1):
# 공격
if i in attacks_dic:
cur_t = 0
cur_health -= attacks_dic[i]
if cur_health <= 0:
return -1
continue
# 공격 받지 않았을 때
cur_t += 1
cur_health += x
# 추가 회복
if cur_t == t:
cur_health += y
cur_t = 0
cur_health = min(cur_health, max_health)
return cur_health
설명
주어진 조건대로 시뮬레이션 하면서 결과를 return 하는 문제 라고 한다.
아 근데 제대로 문제를 이해하지 못해서 다른 사람의 코드를 참조했다.
1. attacks 배열을 딕셔너리로 변형해서 시간복잡도를 확보하자!
2. 공격 받았을 때를 먼저 확인 해야 정답이 됨. 공격 받지 않았거나, 추가 회복일때를 먼저 확인하니 답이 +2 가 됐었었음.
'Coding Test > Python' 카테고리의 다른 글
| [프로그래머스] 디스크 컨트롤러 (1) | 2024.03.31 |
|---|---|
| [백준] 2133 타일 채우기 (0) | 2024.03.27 |
| [PCCP 모의고사 #2] 2번 - 신입사원 교육 (5) | 2024.03.18 |
| [PCCP 모의고사 2] 3번 (0) | 2024.03.13 |
| [PCCP 모의고사 #2] 1번 - 실습용 로봇 (1) | 2024.03.12 |