본문 바로가기

개발지/코테

[프로그래머스] 코테연습 - [PCCP 기출문제] 1번(lv.1)

- 내 방법 풀이

  • 게임에 익숙해서, 프로세스를 이해하기 쉬웠던 문제였다. 조건을 3개로 나눠, 순서대로 최대체력, 공격 유무, 추가 회복 유무에 대해서 생각했다. 이후 제한 조건을 하나씩 확인하며 추가해 나갔다.
  • 잘하는 사람일수록 선언할 변수를 줄이는 방법으로 코드를 짤 것 같다. 내 코드는 내가 이해하기는 쉬웠지만 다른 사람의 평가는 어떨지 궁금한데, 일단 시간의 흐름에 따라 체력의 변화와 공격의 유무를 적용시키는 코드를 짰다. 마지막 공격 이후에 체력을 리턴하면 됨으로, while 문으로 시작했다.
  • 만약 게임에 익숙하지 않았다면 생각보다 중간에 빼먹는 계산이 생길수 밖에 없었을 거 같다.
class Solution {
    public int solution(int[] bandage, int health, int[][] attacks) {
        int time = 0, bandagingTime = 0, attackNum = 0;
        int lastAttackTime = attacks[attacks.length-1][0];
        int maxHealth = health;
        // 붕대의 회복이 다 시전되면 추가회복이 있음.
        // 체력은 최대 체력이 정해져 있음
        // 마지막 공격때까지 time의 흐름에 따라 코드를 짜기
        // 공격 시 붕대의 시전시간이 초기화
        
        while (time <= lastAttackTime) {
            if (health > maxHealth) health = maxHealth; // 최대 체력 조정
            if (time == attacks[attackNum][0]) { // 공격 유뮤 확인
                bandagingTime = 0; // 붕대 시전시간 초기화
                health -= attacks[attackNum][1]; // 체력 깎기
                attackNum++;
            } else { // 공격이 없고
                if (health <= maxHealth) { // 최대체력보다 아래라면 회복 시작
                    health += bandage[1]; // 초당 회복량 회복
                    bandagingTime++; // 시전 시간 증가
                }
            }
            
            if (health <= 0) return -1; // 체력 확인
            
            if (bandagingTime == bandage[0]) { // 연속 회복 성공시 추가 회복
                health += bandage[2];
                bandagingTime = 0;
            }
            time++; // 시간 증가
        }
        return health;
    }
}

- 다른 사람 방법 풀이

  • 새로 나온 문제라 그런지 내 풀이와 딱히 다른 풀이는 보이지 않았다.