[프로그래머스] 광물 캐기 (JS)

hhkim·2023년 11월 20일
0

Algorithm - JavaScript

목록 보기
184/188
post-thumbnail

풀이 과정

DFS
1. 앞으로 5가지 광물에 대해 3가지 경우의 수로 재귀
매번 피로도의 최솟값 갱신
2. 곡괭이가 없거나 모든 광물을 캤으면 리턴

코드

function solution(picks, minerals) {
  let result = Infinity;
  const recursion = (picks, fatigue, i) => {
    if (picks[0] + picks[1] + picks[2] === 0 || i >= minerals.length) {
      result = Math.min(result, fatigue);
      return;
    }
    const arr = Array(3).fill(0);
    for (let j = i; j < i + 5; ++j) {
      if (j === minerals.length) break;
      if (minerals[j] === 'diamond') {
        arr[0] += 1;
        arr[1] += 5;
        arr[2] += 25;
      } else if (minerals[j] === 'iron') {
        arr[0] += 1;
        arr[1] += 1;
        arr[2] += 5;
      } else {
        arr[0] += 1;
        arr[1] += 1;
        arr[2] += 1;
      }
    }
    for (let j = 0; j < 3; ++j) {
      if (picks[j] <= 0) continue;
      recursion(
        picks.map((e, i) => (i === j ? --e : e)),
        fatigue + arr[j],
        i + 5
      );
    }
  };
  recursion(picks, 0, 0);
  return result;
}

🤔

한번에 통과하긴 했는데 코드가 조잡해보여서 맘에 들진 않는다...

0개의 댓글