Q. [PCCP 기출문제] 1번 / 붕대 감기
A.
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
// bandage[t,x,y]
// t: 연속으로 회복해야 하는 시간
// x: 1초마다 회복되는 체력
// y: t초 연속 회복 성공 시 회복되는 추가 체력
int t = bandage[0];
int x = bandage[1];
int y = bandage[2];
int currentHealth = health; // 시작할 때 캐릭터의 체력은 최대 체력
int success = 0; // 연속으로 회복에 성공한 초
int attack = attacks.length; // 공격 수
int countAttack = 0; // 현재까지 처리한 공격 인덱스
int finalAttack = attacks[attack - 1][0]; // 마지막 공격 시간
// 1초부터 마지막 공격 시각까지 1초단위로 진행
for (int currentTime = 1; currentTime <= finalAttack; currentTime++) {
// 현재 시각에 공격이 있는지 확인
// countAttack < attack : 아직 처리할 공격이 남음
// attacks[countAttack][0] == currentTime : 현재 시간이 다음 공격 시간과 동일
if (countAttack < attack && attacks[countAttack][0] == currentTime) {
// 공격이 발생하면, 공격 피해만큼 현재 체력 감소
// 공격이 발생한 순간에는 회복 효과 없으니까 연속 성공 카운트 초기화
// 공격 처리 이후 countAttack 증가시켜서 다음으로 넘김
currentHealth -= attacks[countAttack][1];
success = 0;
countAttack++;
} else { // 현재 공격이 없으면 회복 진행
// 공격 없이 회복 성공했으니까 success 증가, 1초마다 x만큼 체력 회복
success++;
currentHealth += x;
// 회복 후 체력이 최대 체력을 넘지 않아야 함
if (currentHealth > health) {
currentHealth = health;
}
// 만약 연속 성공 시간이 t초가 되면 y만큼 회복 추가
if (success == t) {
currentHealth += y;
if (currentHealth > health) {
currentHealth = health;
}
success = 0; // 추가 회복 끝나면 연속 성공 카운트 0으로 초기화
}
}
// 체력이 0 이하가 되면 죽은 것이므로 -1 반환
if (currentHealth <= 0) {
return -1;
}
}
// 모든 공격이 끝난 후 남은 체력 반환
return currentHealth;
}
}
반응형
'알고리즘, 코딩테스트 > 알고리즘 풀이' 카테고리의 다른 글
[프로그래머스/ 탐욕법(Greedy)] 체육복 (0) | 2025.03.28 |
---|---|
[프로그래머스/ 2019 KAKAO BLIND RECRUITMENT] 실패율 (0) | 2025.03.28 |
[프로그래머스/ 정렬] K번째수 (0) | 2025.03.28 |
[프로그래머스/ 2025 프로그래머스 코드챌린지 1차 예선] 유연근무제 (0) | 2025.03.27 |
[프로그래머스/ 해시] 완주하지 못한 선수 (1) | 2025.03.27 |