https://school.programmers.co.kr/learn/courses/30/lessons/250137
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(bandage, health, attacks):
dic = {} #attacks 딕셔너리
count = 0 #연속 성공 시간
max_health = health #최대 체력
for attack in attacks: #attacks 배열을 {공격시간:피해량} 형태의 딕셔너리로 만든다
dic[attack[0]] = attack[1]
for i in range(1, attacks[-1][0]+1): #1초부터 마지막 공격시간까지 반복
if i in dic:
health -= dic[i] #공격 시 체력 감소
count = 0 #연속 성공 초기화
else:
health += bandage[1] #공격 없을 시 체력 회복
count += 1 #연속 성공 증가
if count == bandage[0]:
health += bandage[2] #연속 성공 완료 시 체력 추가 획득
count = 0 #연속 성공 초기화
if health >= max_health:
health = max_health #최대 체력 초과 불가
if health <= 0:
return -1 #체력 0 이하일 때 -1 반환
return health
- 1초부터 마지막 공격시간(attacks[-1][0])까지 반복문 형태로 구현했고, attacks 배열을 딕셔너리 형태로 만들어서 공격시간을 비교하도록 했다.
- 연속 성공 시간은 count 변수로 지정해서 공격 받는 경우/연속 성공 완료인 경우 0으로 초기화하도록 했다.
'코딩테스트 > Python' 카테고리의 다른 글
| [프로그래머스][파이썬] 연속 부분 수열 합의 개수 (2) | 2023.12.05 |
|---|---|
| [프로그래머스][파이썬] 귤 고르기 (2) | 2023.12.05 |
| [프로그래머스][파이썬] 이웃한 칸 (0) | 2023.11.29 |
| [프로그래머스][파이썬] 멀리 뛰기 (1) | 2023.11.24 |
| [프로그래머스][파이썬] 다음 큰 숫자 (1) | 2023.11.23 |