[알고리즘] 백준2851 슈퍼 마리오 (자바스크립트)

Subin·2022년 12월 2일
0
post-thumbnail
post-custom-banner

완전탐색
슈퍼 마리오

✏️ 요구 사항 분석

  1. 마리오는 버섯을 100점에 가깝게 먹어야 한다.
  2. 일렬로 놓여져 있는 10개의 버섯을 순서대로 먹어야한다.
  3. 버섯 먹는걸 중단했으면 게임 끝이다.
  4. 각각의 버섯 점수는 입력으로 주어진다.
  5. 만약 100에 가까운 수가 2개라면 그 중 큰 값을 선택한다.

🗒 내 풀이

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));

⌨️ 풀이 과정

1

mushrooms.forEach((mushroom) => {...}

먼저 입력받은 버섯들을 forEach 문으로 하나씩 반복한다.

2

score += mushroom;
diff = Math.abs(score - targetScore);

socre 는 마리오가 먹은 버섯의 점수를 담는 변수이니 점수 누적을 해준다.
difftargetScore 즉 목표 점수인 100점과 얼마나 차이가 있는지 확인하기 위한 변수이다.
함수 Math.abs() 를 통해 목표 점수인 targetScore와 누적되는 점수인 score의 차이가 얼마나 나는지 확인할 수 있게 했다.
결론은 diff의 값이 10이면 목표 점수인 100점과 10점 차이가 난다는 뜻이다.

3

if (diff <= min) {
  min = diff;
  answer = Math.max(answer, score);
}

diff의 값이 0에 가까울수록 이 프로그램의 목표인 100점에 가까운 수이기 때문에 최솟값을 구하기 위해 if 문을 활용했다. 목표 점수에 가까워질 수 있는 경우가 2개이기에 diff < min 이 아닌 diff <= min 을 썻다.

여기서 Math.max() 함수를 사용한 이유는 이 프로그램의 요구사항 5번인 만약 100에 가까운 수가 2개라면 그 중 큰 값을 선택한다. 가 있기 때문에 큰값을 정답으로 저장하였다.

profile
고양이가 세상을 지배한다.
post-custom-banner

0개의 댓글