Jieunny의 λΈ”λ‘œκ·Έ

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - ν”Όλ‘œλ„ λ³Έλ¬Έ

Study/Coding Test

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - ν”Όλ‘œλ„

Jieunny 2023. 4. 4. 15:48

πŸ“Œ  문제

XXκ²Œμž„μ—λŠ” ν”Όλ‘œλ„ μ‹œμŠ€ν…œ(0 μ΄μƒμ˜ μ •μˆ˜λ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€)이 있으며, 일정 ν”Όλ‘œλ„λ₯Ό μ‚¬μš©ν•΄μ„œ λ˜μ „μ„ νƒν—˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 각 λ˜μ „λ§ˆλ‹€ νƒν—˜μ„ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"와 λ˜μ „ νƒν—˜μ„ λ§ˆμ³€μ„ λ•Œ μ†Œλͺ¨λ˜λŠ” "μ†Œλͺ¨ ν”Όλ‘œλ„"κ°€ μžˆμŠ΅λ‹ˆλ‹€. "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"λŠ” ν•΄λ‹Ή λ˜μ „μ„ νƒν—˜ν•˜κΈ° μœ„ν•΄ 가지고 μžˆμ–΄μ•Ό ν•˜λŠ” μ΅œμ†Œν•œμ˜ ν”Όλ‘œλ„λ₯Ό λ‚˜νƒ€λ‚΄λ©°, "μ†Œλͺ¨ ν”Όλ‘œλ„"λŠ” λ˜μ „μ„ νƒν—˜ν•œ ν›„ μ†Œλͺ¨λ˜λŠ” ν”Όλ‘œλ„λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„"κ°€ 80, "μ†Œλͺ¨ ν”Όλ‘œλ„"κ°€ 20인 λ˜μ „μ„ νƒν—˜ν•˜κΈ° μœ„ν•΄μ„œλŠ” μœ μ €μ˜ ν˜„μž¬ 남은 ν”Όλ‘œλ„λŠ” 80 이상 이어야 ν•˜λ©°, λ˜μ „μ„ νƒν—˜ν•œ ν›„μ—λŠ” ν”Όλ‘œλ„ 20이 μ†Œλͺ¨λ©λ‹ˆλ‹€.

이 κ²Œμž„μ—λŠ” ν•˜λ£¨μ— ν•œ λ²ˆμ”© νƒν—˜ν•  수 μžˆλŠ” λ˜μ „μ΄ μ—¬λŸ¬κ°œ μžˆλŠ”λ°, ν•œ μœ μ €κ°€ 였늘 이 λ˜μ „λ“€μ„ μ΅œλŒ€ν•œ 많이 νƒν—˜ν•˜λ € ν•©λ‹ˆλ‹€. μœ μ €μ˜ ν˜„μž¬ ν”Όλ‘œλ„ k와 각 λ˜μ „λ³„ "μ΅œμ†Œ ν•„μš” ν”Όλ‘œλ„", "μ†Œλͺ¨ ν”Όλ‘œλ„"κ°€ λ‹΄κΈ΄ 2차원 λ°°μ—΄ dungeons κ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μœ μ €κ°€ νƒν—˜ν• μˆ˜ μžˆλŠ” μ΅œλŒ€ λ˜μ „ 수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

πŸ’‘  아이디어

μ£Όμ–΄μ§€λŠ” λ˜μ „μ˜ μ΅œλŒ€ κ°œμˆ˜κ°€ 8개이기 λ•Œλ¬Έμ— μ™„μ „νƒμƒ‰μœΌλ‘œ 풀어도 λœλ‹€.

=> 주어진 λ˜μ „μ„ μˆœνšŒν•  수 μžˆλŠ” λͺ¨λ“  경우의 수λ₯Ό ν•΄λ³΄λŠ” 방법(DFS)

λͺ¨λ“  경우의 수λ₯Ό 해보고 κ·Έ 쀑 κ°€μž₯ λ§Žμ€ λ˜μ „μ„ νƒν—˜ν•  수 μžˆλŠ” 경우의 닡을 λ°˜ν™˜ν•œλ‹€.

 

✏️  풀이

let answer = 0;

function solution(k, dungeons) {
  const visited = Array(dungeons.length).fill(false);
  // λ°©λ¬Έ ν–ˆλŠ”μ§€ 기둝
  dfs(k, 0, dungeons, visited);

  return answer;
}

function dfs(k, result, dungeons, visited) {
  // result = λ°©λ¬Έ λ˜μ „ 개수, k = 남은 ν”Όλ‘œλ„
  answer = answer > result ? answer : result;
  // λ‘˜ 쀑 더 많이 νƒν—˜ν•œ 걸둜 answer을 κ°±μ‹ 
  for(let i=0; i<dungeons.length; i++){
    if(!visited[i] && k >= dungeons[i][0]){
    // 아직 κ°„ 적 μ—†κ³ , ν”Όλ‘œλ„κ°€ μΆ©λΆ„ν•˜λ‹€λ©΄
      visited[i] = true;
      dfs(k-dungeons[i][1], result+1, dungeons, visited);
      // 이번 λ˜μ „ νƒν—˜ν–ˆλ‹€κ³  μƒκ°ν•˜κ³ , λ‹€μŒ λ˜μ „ νƒν—˜ν•œλ‹€.
      visited[i] = 0;
      // dfs둜 순회 λ‹€ 끝내고 μ „ λ…Έλ“œλ‘œ λŒμ•„κ°ˆλ•ŒλŠ” μ§€κΈˆ λ…Έλ“œ λ°©λ¬Έ μ•ˆν•œκ±Έλ‘œ λ‹€μ‹œ λ°”κΏ”μ€˜μ•Όν•œλ‹€.
    }
  }
  return answer;
}