코딩테스트

[프로그래머스] 붕대 감기 (JS)

여유로운 프론트엔드 개발자 2024. 11. 2. 15:19

문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

  (1) attacks를 객체로 관리한다. (key -> 공격 받는 시간, value -> 데미지)

  (2) attacks는 공격 시간을 기준으로 오름 차순 정렬된 상태이므로 마지막 공격 시간까지 for문을 한 번 돌면 된다.

  (3) 문제 조건에 맞게 구현한다.

function solution(bandage, health, attacks) {
    const attack = {};
    const maxAttackTime = attacks[attacks.length - 1][0];
    attacks.forEach(data => {
        attack[data[0]] = data[1];
    })
    
    let answer = health;
    let [시전시간, 초당회복량, 추가회복량] = bandage;
    let 연속성공 = -1;
    
    for (let i = 0; i <= maxAttackTime; i++) {
        if (Object.keys(attack).includes(i.toString())) {
            answer -= attack[i.toString()];
            if (answer <= 0) {
                answer = -1;
                break;
            }
            연속성공 = 0;
            continue;
        }
        
        if (answer < health) {
            if (answer + 초당회복량 > health) answer = health;
            else answer += 초당회복량;
        }
        
        연속성공++;
        
        if (연속성공 === 시전시간) {
            if (answer + 추가회복량 > health) answer = health;
            else answer += 추가회복량;
            연속성공 = 0;
        }
    }
    
    return answer;
}

 

결론

조건이 여러개인 구현 문제이다.

변수가 많이 존재하므로 문제를 꼼꼼하게 읽고 코드를 작성해야 한다.