๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Javascript] ํ”ผ๋กœ๋„ (87946)

๋ฌธ์ œ๋งํฌ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ”ผ๋กœ๋„

XX๊ฒŒ์ž„์—๋Š” ํ”ผ๋กœ๋„ ์‹œ์Šคํ…œ(0 ์ด์ƒ์˜ ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค)์ด ์žˆ์œผ๋ฉฐ, ์ผ์ • ํ”ผ๋กœ๋„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋˜์ „์„ ํƒํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, ๊ฐ ๋˜์ „๋งˆ๋‹ค ํƒํ—˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ "์ตœ์†Œ ํ•„์š” ํ”ผ๋กœ๋„"์™€ ๋˜

programmers.co.kr

 

์ ‘๊ทผ ๋ฐฉ๋ฒ•

์ฒ˜์Œ์—๋Š” ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ์ธ ์ค„ ์•Œ์•˜๋‹ค.

ํ•˜์ง€๋งŒ ์•ž์˜ ์„ ํƒ์ด ์ดํ›„์˜ ์„ ํƒ์— ์˜ํ–ฅ์„ ์ฃผ๋ฉด ์•ˆ๋˜๋Š” ๊ทธ๋ฆฌ๋””์˜ ํŠน์„ฑ์„ "๋‚จ์€ ํ”ผ๋„๋กœ"์™€ "์ตœ์†Œ ์š”๊ตฌ ํ”ผ๋กœ๋„"๊ฐ€ ๋งŒ์กฑ ์‹œํ‚ค์ง€ ์•Š์•„ ์™„์ „ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์—ˆ๋‹ค.
(๋˜์ „์˜ ๊ฐœ์ˆ˜๋„ ์ตœ๋Œ€ 8๊ฐœ์ด๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„์—์„œ๋„ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๋“ฏ ์‹ถ์—ˆ๋‹ค.)

๋ชจ๋“  ๋˜์ „์˜ ์ˆœ์—ด์„ ๊ตฌํ•œ ๋’ค, ๊ฐ ๋˜์ „์˜ ํƒํ—˜ ํšŸ์ˆ˜๋ฅผ ๋‹ด์•„ max๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

exploredCntArr = ๊ฐ ์กฐํ•ฉ๋งˆ๋‹ค ํƒํ—˜ํšŸ์ˆ˜๋ฅผ ๋‹ด๋Š” ๋ฐฐ์—ด
dungeonPermutations = ๋˜์ „์˜ ๋ชจ๋“  ์ˆœ์—ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ด์€ 2์ฐจ ๋ฐฐ์—ด
exploredCnt = ๋˜์ „ ํƒํ—˜ ํšŸ์ˆ˜(ํ•œ ๋˜์ „์กฐํ•ฉ์ด ๋๋‚˜๋ฉด ๋งค๋ฒˆ 0์œผ๋กœ ์ดˆ๊ธฐํ™”)
remainedPirodo = ๋‚จ์€ ํ”ผ๋กœ๋„ (ํ•œ ๋˜์ „์กฐํ•ฉ์ด  ๋๋‚˜๋ฉด ๋งค๋ฒˆ k๋กœ ์ดˆ๊ธฐํ™”)
hadPirodo = ์ž…์žฅ์‹œ ์ตœ์†Œ ํ•„์š”ํ•œ ํ”ผ๋กœ๋„
usedPirodo = ์ž…์žฅ์‹œ ์‚ฌ์šฉ๋˜๋Š” ํ”ผ๋กœ๋„
function solution(k, dungeons) {
    var answer = 0;
    const exploredCntArr = [];
    const dungeonPermutations = getPermutations(dungeons, dungeons.length)
    
    dungeonPermutations.forEach(dungeon => {
      let exploredCnt = 0;
      let remainedPirodo = k;
      dungeon.forEach((pirodo) => {
        const [hadPirodo, usedPirodo] = pirodo;
            if(remainedPirodo >= hadPirodo){
                remainedPirodo -= usedPirodo;
                exploredCnt++;
            }
        })  
        exploredCntArr.push(exploredCnt);
    })
    
    answer = Math.max(...exploredCntArr);
    
    return answer;
}



const getPermutations= function (arr, selectNumber) {
  const results = [];
  if (selectNumber === 1) return arr.map((value) => [value]);

  arr.forEach((fixed, index, origin) => {
    const rest = [...origin.slice(0, index), ...origin.slice(index+1)]
    const permutations = getPermutations(rest, selectNumber - 1);
    const attached = permutations.map((permutation) => [fixed, ...permutation]);
    results.push(...attached);
  });

  return results;
};