문제 - [PCCP 기출문제] 1번/붕대감기


정답
- 몬스터가 공격하는 시간을 체크하기 위해 Stack 사용
- for문으로 일일히 시간을 확인하는 것보다 맨 앞의 시간 가져온 후 버리는게 효율적이라고 생각함
import java.util.*;
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int t = 0; // 시간
int s = 0; // 연속 성공
int h = health; // 체력 변화량
int frontAttack = 0; // 공격 시간 버퍼
Stack<Integer> attackTime = new Stack<>(); // 공격 시간을 저장할 스택 선언
for (int i = 0; i < attacks.length; i++){
attackTime.push(attacks[i][0]); // 공격 시간만 저장
}
frontAttack = attackTime.pop(); // 앞선 시간부터 빼오기
int k = 0; // 인덱스 확인
while (t < attacks[attacks.length-1][0]){
t++; // 시간 흐름
// 몬스터 공격 시간 //
if (t == frontAttack){ // 공격 확인
h -= attacks[k][1]; // 체력 감소
s = 0; // 연속 성공 초기화
if (h <= 0){ // 캐릭터가 죽은 경우
h = -1;
break;
}
if (k < attacks.length){
frontAttack = attackTime.pop(); // 다시 시간 빼오기
k++;
}
continue;
}
// 붕대 감기 시간 //
if (h < health){ // 최대 체력이 아닐 경우
h += bandage[1]; // 초당 회복
}
s += 1; // 연속 성공 증가
if (s == bandage[0]){ // 연속 성공 달성 시
if (h < health - bandage[2]){
h += bandage[2]; // 완전히 추가 회복
} else if (health - bandage[2] <= h && h < health){
h = 30; // 최대 체력까지만 추가 회복
}
s = 0; // 연속 성공 초기화
}
}
int answer = h;
return answer;
}
}
시간복잡도
While문으로 O(n)
다른 사람 풀이
'취업 > 코딩테스트' 카테고리의 다른 글
| 프로그래머스 유연근무제 (0) | 2025.04.22 |
|---|---|
| 프로그래머스 택배 상자 꺼내기 (0) | 2025.03.27 |
| 백준[1181] 단어 정렬 (0) | 2024.08.13 |
| 프로그래머스 가장 가까운 같은 글자 (3) | 2024.05.24 |
| 코딩테스트 준비 문법 정리 (2) | 2024.05.17 |