μ•Œκ³ λ¦¬μ¦˜/νƒœκ·Έ 별 풀이

[DFS]μ΅œλŒ€ 점수 κ΅¬ν•˜κΈ°

choi95 2021. 8. 4. 21:40

문제

이번 μ •λ³΄μ˜¬λ¦Όν”Όμ•„λ“œ λŒ€νšŒμ—μ„œ 쒋은 성적을 λ‚΄κΈ° μœ„ν•˜μ—¬ ν˜„μˆ˜λŠ” μ„ μƒλ‹˜μ΄ μ£Όμ‹  N개의 문제λ₯Ό ν’€λ €κ³  ν•©λ‹ˆλ‹€.각 λ¬Έμ œλŠ” 그것을 ν’€μ—ˆμ„ λ•Œ μ–»λŠ” μ μˆ˜μ™€ ν‘ΈλŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ§€κ²Œ λ©λ‹ˆλ‹€.μ œν•œμ‹œκ°„ Mμ•ˆμ— N개의 문제 쀑 μ΅œλŒ€μ μˆ˜λ₯Ό 얻을 수 μžˆλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€.(ν•΄λ‹Ήλ¬Έμ œλŠ” ν•΄λ‹Ήμ‹œκ°„μ΄ 걸리면 ν‘ΈλŠ” 걸둜 κ°„μ£Όν•œλ‹€. ν•œ μœ ν˜• λ‹Ή ν•œ 개만 ν’€ 수 μžˆμŠ΅λ‹ˆλ‹€)

 

λ¬Έμ œν’€μ΄

DFS 탐색

 

μ½”λ“œ

function solution(limit, arr) {
  let answer = Number.MIN_SAFE_INTEGER;
  let n = arr.length;

  function DFS(level, time, sum) {
    if(level === n) {
      if(time > limit) return; //μ œν•œ μ‹œκ°„μ„ μ΄ˆκ³Όν–ˆμ„ 경우
      answer = Math.max(answer, sum)
    }
    else {
      DFS(level + 1, time + arr[level][1], sum + arr[level][0]); //문제λ₯Ό ν’€ κ²½μš°μ—λŠ” 점수λ₯Ό νšλ“ν•˜μ§€λ§Œ μ‹œκ°„ λ˜ν•œ 좕적 됨
      DFS(level + 1, time, sum); //문제λ₯Ό ν’€μ§€ μ•ŠλŠ” κ²½μš°μ—λŠ” 점수λ₯Ό νšλ“ν•˜μ§€ λͺ»ν•˜μ§€λ§Œ μ‹œκ°„μ„ μ„Έμ΄λΈŒν•  수 있음
    }
  }

  DFS(0, 0, 0);
  return answer;
}

console.log(solution(20, [[10,5], [25, 12], [15, 8], [6, 3], [7, 4]]));