본문 바로가기
알고리즘

[프로그래머스 LV2] 피로도

by limew 2023. 8. 25.

https://school.programmers.co.kr/learn/courses/30/lessons/87946

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

완전탐색, dfs

배운점

탈출조건이 dfs안에 있을수도 있다

 

 

function solution(k, dungeons) {
  var answer = -1;
  // const min = Math.min(...dungeons.map((d) => d[0])); // 참여하기 위해 필요한 최소 최소필요 피로도

  // 현재피로도, 방문한 던전 갯수, 미방문한 던전
  function dfs(curr, step, restArr) {
    answer = Math.max(answer, step);

    // [탈출조건] 현재피로도가 최소필요피로도보다 작을시 // 밑에 if (need <= curr) 와 반복으로 없어도 됌
    // if (curr < min) {
    //   return;
    // }

    for (let i = 0; i < restArr.length; i++) {
      const [need, consume] = restArr[i];
      // [탈출조건] 최소필요피로도가 충분할 시만 dfs
      if (need <= curr) {
        const newRestArr = [...restArr];
        newRestArr.splice(i, 1);
        dfs(curr - consume, step + 1, newRestArr);
      }
    }
  }
  dfs(k, 0, dungeons);
  return answer;
}