완전탐색
슈퍼 마리오
function solution(mushrooms) {
let score = 0;
let targetScore = 100;
let min = Number.MAX_SAFE_INTEGER;
let diff = 0;
let answer = 0;
mushrooms.forEach((mushroom) => {
score += mushroom;
diff = Math.abs(score - targetScore);
if (diff <= min) {
min = diff;
answer = Math.max(answer, score);
}
});
return answer;
}
let mushrooms = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89];
console.log(solution(mushrooms));
mushrooms.forEach((mushroom) => {...}
먼저 입력받은 버섯들을 forEach
문으로 하나씩 반복한다.
score += mushroom;
diff = Math.abs(score - targetScore);
socre
는 마리오가 먹은 버섯의 점수를 담는 변수이니 점수 누적을 해준다.
diff
는 targetScore
즉 목표 점수인 100점과 얼마나 차이가 있는지 확인하기 위한 변수이다.
함수 Math.abs()
를 통해 목표 점수인 targetScore와 누적되는 점수인 score의 차이가 얼마나 나는지 확인할 수 있게 했다.
결론은 diff의 값이 10이면 목표 점수인 100점과 10점 차이가 난다는 뜻이다.
if (diff <= min) {
min = diff;
answer = Math.max(answer, score);
}
diff의 값이 0에 가까울수록 이 프로그램의 목표인 100점에 가까운 수이기 때문에 최솟값을 구하기 위해 if 문을 활용했다. 목표 점수에 가까워질 수 있는 경우가 2개이기에 diff < min
이 아닌 diff <= min
을 썻다.
여기서 Math.max()
함수를 사용한 이유는 이 프로그램의 요구사항 5번인 만약 100에 가까운 수가 2개라면 그 중 큰 값을 선택한다.
가 있기 때문에 큰값을 정답으로 저장하였다.