코깽이의 코딩일기

[ 프로그래머스 / JAVA / Level 1 ] [PCCP 기출문제] 1번 / 붕대 감기 본문

PS/프로그래머스

[ 프로그래머스 / JAVA / Level 1 ] [PCCP 기출문제] 1번 / 붕대 감기

코깽이 2024. 6. 13. 15:26
반응형

제출한 코드

import java.util.*;

class Solution {
    public int solution(int[] bandage, int health, int[][] attacks) {
        Deque<int[]> attack = new ArrayDeque<>();
        for(int[] data : attacks){
            attack.add(data);
        }
        
        int maxHealth = health;
        int count = 0;
        int time = 1;
        
        while(!attack.isEmpty()){
            // 몬스터 공격을 받는 경우
            if(attack.peekFirst()[0] == time){
                count = 0;
                health-= attack.poll()[1];
                // 캐릭터 사망
                if(health <= 0){
                    return -1;
                }
            }
            // 붕대를 감는 경우
            else{
                health+=bandage[1];
                count++;
                if(count == bandage[0]){
                    health+= bandage[2];
                    count = 0;
                }
                // 최대체력을 넘을 수 없음
                health = Math.min(health, maxHealth);   
            }
            time++;
        }
        return health;
    }
}

생각한 로직

1. 공격이 들어오는 경우, 붕대를 감는 경우 2가지로 분류하여 while문을 실행한다.

2. while문 종료조건은 몬스터 공격이 끝나는 타이밍이기에 편의를 위해 attacks값을 Deque에 넣고 사용했다.

3. 매번 poll()을 사용해 attack 요소를 가져올 필요없이 peek을 이용한다.

4. 캐릭터 사망 조건과 최대 체력을 넘을 수 없다는 조건을 주의해서 문제에 나온 조건 대로 진행하면 끝나는 단순한 문제이다.

반응형