728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 10 - ์ˆœ์—ด ๊ตฌํ•˜๊ธฐ

10์ดํ•˜์˜ N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ด ์ค‘ M๊ฐœ๋ฅผ ๋ฝ‘์•„ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ค‘๋ณต์ˆœ์—ด ๊ตฌํ•˜๊ธฐ ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ์ ์€ ์ค‘๋ณต์—†์ด ์ˆœ์„œ์— ์ƒ๊ด€์žˆ๊ฒŒ ์„ ํƒํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.  ๋งŒ์•ฝ 3๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๊ณ  ์ด ์ค‘ 2๊ฐœ๋ฅผ ๋ฝ‘์•„ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ด 6๊ฐ€์ง€์ด๋‹ค.

 

๐Ÿ‘ ํ’€์ด ๋ฐฉ๋ฒ•

ch ๋ฐฐ์—ด์€ tmp ๋ฐฐ์—ด์— ์–ด๋–ค ์ˆ˜๊ฐ€ ์„ ํƒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด์ด๋‹ค. (์ค‘๋ณต ๊ฒ€์ฆ)

  • ch[i]์˜ ๊ฐ’์ด 0์ด๋ฉด ์„ ํƒ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์„ ํƒํ•ด๋„ ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋ฐ˜๋Œ€๋กœ ch[i]์˜ ๊ฐ’์ด 1์ด๋ฉด ์ด๋ฏธ ์„ ํƒ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ด๋‹ค.
  • L(ํŠธ๋ฆฌ์˜ ๋ ˆ๋ฒจ)์ด m๊ณผ ๊ฐ™๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ๊ฐ€ ์™„์„ฑ๋œ ๊ฒƒ์ด๋ฏ€๋กœ tmp ๋ฐฐ์—ด์„ ์–•์€ ๋ณต์‚ฌํ•˜์—ฌ answer ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • DFS ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ๋๋‚œ ๋‹ค์Œ์—” ch[i](์ด์ „์— ์„ ํƒํ•œ ์ˆซ์ž)๋ฅผ 0์œผ๋กœ ์žฌํ• ๋‹น ํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด๋Š” ๊ฒƒ์ด ์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

function solution(m, arr) {
  const answer = [];
  const n = arr.length;
  const ch = Array.from({ length: n }, () => 0);
  const tmp = Array.from({ length: m }, () => 0);

  function DFS(L) {
    if (L === m) {
      answer.push(tmp.slice());
    } else {
      for (let i = 0; i < n; i++) {
        if (ch[i] === 0) {
          ch[i] = 1;
          tmp[L] = arr[i];
          DFS(L + 1);
          ch[i] = 0;
        }
      }
    }
  }
  DFS(0);

  for (let [a, b] of answer) {
    console.log(a, b);
  }

  return answer.length;
}

let arr = [3, 6, 9];
console.log(solution(2, arr));

 

๐Ÿ“ ํ•œ ๋งˆ๋”” ๋‚จ๊ธฐ๋ฉฐ..

์ดํ•ดํ•˜๋Š”๋ฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด๋Š” ๊ฒƒ์ด ์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ์–ด๋ ต๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”~ ์ข‹์€ ํ•˜๋ฃจ ๋˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค๐Ÿ˜Š

_์„ฑํ˜ธ_