문제
프로그래머스
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;
}
결론
조건이 여러개인 구현 문제이다.
변수가 많이 존재하므로 문제를 꼼꼼하게 읽고 코드를 작성해야 한다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 과제 진행하기 (JS) (2) | 2024.11.16 |
---|---|
[프로그래머스] 뉴스 클러스터링 (JS) (0) | 2024.11.03 |
[백준] 그룹 단어 체커 (JS) (3) | 2024.10.16 |
[백준] 회의실 배정 (JS) (0) | 2024.10.12 |
[백준] 방 번호 (JS) (0) | 2024.10.04 |