문제를 풀기위해 아래와 같은 요소들을 고려하였다.
- 가독성과 안정성을 위한다면 주어진 조건을 순서대로 구현하는것이 좋지만 코드를 간소화 하거나 실행시간을 줄이기 위해서는 생략이나 이동이 가능한 코드는 조절을 하는것이 유리하다.
- return문은 코드 마지막에 한개만 존재해야 하는것이 아니다. 결과가 존재하여 더이상의 연산이 필요없을때는 바로 return문을 사용해도 무관하다.
- 회복과 피해를 반복하는 과정 중간에 캐릭터가 죽는다면 더이상의 연산을 진행하지 않고 -1을 반환한다. 연산을 중단하지 않으면 죽은 이후에 높은 회복량으로 다시 체력이 오를 가능성이 있다.
더보기
function solution(bandage, health, attacks) {
let answer = health;
for(let i = 0;i<attacks.length;i++) {
// 이번턴에 사용하는 시간 계산
let nowTime = i === 0 ? attacks[i][0] : attacks[i][0] - attacks[i-1][0];
// 1초당 회복량 계산
answer += (nowTime-1) * bandage[1];
// 연속 성공시의 추가 회복량 계산
answer += Math.floor((nowTime-1)/bandage[0]) * bandage[2];
// 체력이 최대치를 넘을 경우 보정
if(answer>health) answer=health;
// 피해량 계산
answer -= attacks[i][1];
// 캐릭터가 죽었을 경우 -1을 반환하고 종료
if(answer <= 0) return -1;
}
return answer;
}
• break
break를 사용하면 반복문의 중간에 현재 반복문을 종료하도록 할 수 있다.
let arr = [10, 20, 30, 40, 50];
for(let i=0;i<arr.length;i++) {
console.log(arr[i]);
if(i === 2) break;
}
//10, 20, 30 이 출력됨
반복문이 진행되는동안 i === 2 가 되면 break 문에 의해 반복문이 중단된다.
i가 0, 1, 2 일때 console.log가 동작하고 반복문이 종료되므로 10, 20, 30이 출력된다.
'기타 > 알고리즘' 카테고리의 다른 글
(JS) match() [Programmers - 문자열 내 p와 y의 개수] (0) | 2024.10.06 |
---|---|
(JS) toUpperCase(), toLowerCase() [Programmers - JadenCase 문자열 만들기] (0) | 2024.10.04 |
(JS) Set [Programmers - 신고 결과 받기] (0) | 2024.10.01 |
(JS) 객체를 배열로 변환, 절댓값 [Programmers - 성격 유형 검사하기] (0) | 2024.09.30 |
(JS) 동적 객체 key와 배열/객체 탐색 [Programmers - 달리기 경주] (0) | 2024.09.30 |