오랜만에 프로그래머스로 문제를 풀어보았다!!
요즘 알고리즘 스터디를 하면서 노션에 정리했었는데 이 문제는 스터디에서 다룬 문제가 아니므로 블로그에 작성해보겠다!
https://school.programmers.co.kr/learn/courses/30/lessons/250137
(문제가 너무 길어 링크로 첨부합니다!)
function solution(bandage, health, attacks) {
let answer = 0;
let attackMap = new Map(attacks);
let lastAttack = Math.max(...attackMap.keys());
const MAX = health;
let hp = health;
let success = 0;
for (let i = 1; i <= lastAttack; i++) {
if (hp <= 0) break;
if (!attackMap.has(i)) {
success++;
if (success === bandage[0]) {
hp += bandage[2];
success = 0;
}
hp += bandage[1];
} else {
let damage = attackMap.get(i);
hp -= damage;
success = 0;
}
// 최대 체력을 초과하지 않도록 보정
if (hp > MAX) hp = MAX;
}
answer = hp <= 0 ? -1 : hp;
return answer;
}
문제 풀이
소요시간: 1시간
변수 선언
answer : 정답 변수
attackMap = new Map(attacks); //Map으로 해보고싶었음 ..!
lastAttack :마지막 공격 시간 저장
MAX : 최대 체력
success : 연속 성공 횟수
반복문을 마지막 공격시간인 lastAttack까지 실행
1. 공격시간이 아닐 때
1) 공격시간이 아니면서 success 가 시전시간보다 작을 때
-> 연속 성공횟수 1 증가 및 현재 피에 초당 회복량을 추가
2) 공격시간이 아니면서 success가 시전시간일 때
-> 현재 피에 추가 회복량을 더해주고 success를 0 으로 초기화 , 초당 회복량을 추가
2. 공격시간일 때
현재 피에 damage만큼 빼주고 success를 0으로 초기화
반례)
1. 만약 hp가 0보다 작을 땐 즉시 반복문을 종료
2. 현재 피가 max보다 클 때 max로 유지
출력
hp가 0보다 작을 때 -1로 변환 후 대입, 그 외에는 hp를 answer에 대입
'코테 준비 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 (js) (1) | 2024.11.10 |
---|---|
[프로그래머스]키패드 누르기 (javascript) (1) | 2024.09.11 |
[프로그래머스] 단어변환 (javascript) (0) | 2023.11.21 |
프로그래머스 문제를 복사하면 배경까지 복사되네 .. ? 해결방안은 ? (1) | 2023.11.17 |
[프로그래머스] 전령망을 둘로 나누기 (0) | 2023.11.17 |