안녕하세요
PCCP 기출 문제 1번 붕대 감기 (js) 본문
문제 조건 확인
// 붕대감기
// t초 동안 붕대를 감으면서 1초마다 x만큼의 체력을 회복
// t초 연속으로 붕대를 감는 데 성공한다면 y만큼의 체력을 추가로 회복
// 붕대 감기 연속 성공
// 시전시간만큼 연속으로 성공하면 (1+추가 회복량)만큼 회복
// 공격
// 기술을 쓰는 도중 몬스터에게 공격을 당하면 기술이 취소
// 공격을 당하는 순간에는 체력을 회복할 수 없습니다
// 연속 성공 시간이 0으로 초기화
// 체력
// 최대 체력
// 현재 체력이 0 이하가 되면 캐릭터가 죽으며 더 이상 체력을 회복할 수 없습니다.
// 살아있으면 체력 반환, 죽으면 -1 반환
문제 풀이
공격이 일어나면, 붕대 감기는 시행할 수 없다.
공격 실행
> 체력 감소, 연속 성공 초기화
> 체력이 0이면 종료
(공격 실행X) && 붕대 감기
> 연속 성공 횟수 도달 시 (기본회복량 + 연속성공회복량) 만큼 체력 회복
> 최대 체력을 넘을 수 없음
function solution(bandage, health, attacks) {
const [castTime,baseHeal,additionalHeal] = bandage;
const lastTime = attacks[attacks.length - 1][0];
const remainAttacks = attacks.reverse(); // shift대신 pop 이용
let currentHealth = health;
let continuousTime = 0;
for (let i=1; i<=lastTime; i++) {
// 공격
if (remainAttacks[remainAttacks.length - 1][0] === i) {
const damage = remainAttacks.pop()[1];
currentHealth -= damage; // 체력 감소
continuousTime = 0; // 연속 성공 시간이 0으로 초기화
if (currentHealth <= 0) {
return -1; // 현재 체력이 0 이하가 되면 캐릭터가 죽으며 더 이상 체력을 회복할 수 없음
}
continue; // 붕대 감기 기술이 취소, 체력을 회복할 수 없음
}
// 붕대 감기
if (++continuousTime === castTime) {
currentHealth += (baseHeal + additionalHeal);
continuousTime = 0; // 연속 성공 카운트 초기화
} else {
currentHealth += baseHeal;
}
if (currentHealth > health) {
currentHealth = health; // 최대 체력 넘을 수 없음
}
}
return currentHealth;
}
'프로그래머스' 카테고리의 다른 글
PCCP 기출 문제 2번 석유 시추 (js) (2) | 2023.12.09 |
---|---|
[알고리즘] 투포인터, 슬라이딩 윈도우 (연속된 부분 수열의 합 js) (0) | 2023.11.23 |
프로그래머스 JS 깊이/너비 우선 탐색(DFS/BFS) [4/7] (0) | 2023.11.19 |
프로그래머스 JS 스택/큐 [6/6] (0) | 2023.11.17 |
프로그래머스 JS 깊이/너비 우선 탐색(DFS/BFS) [4/7] (0) | 2023.09.12 |