๐Ÿ“Œ javascript ๊ฐœ๋… #11 ์กฐํ•ฉ / ์ˆ˜ํ•™๊ธฐ๋ณธ์ด๋ก  (3)

doyeonleeยท2022๋…„ 3์›” 29์ผ
0

js / html / css

๋ชฉ๋ก ๋ณด๊ธฐ
11/13
post-thumbnail

์ˆ˜ํ•™๊ธฐ๋ณธ์ด๋ก  / ๊ฒฝ์šฐ์˜ ์ˆ˜ / ์กฐํ•ฉ

์กฐํ•ฉ (combination) : nCr

: ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ ์ค‘์—์„œ r์„ ์ค‘๋ณต ์—†์ด ๊ณจ๋ผ ์ˆœ์„œ์— ์ƒ๊ด€ ์—†์ด ๋‚˜์—ด
=> for๋ฌธ๊ณผ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํ‘œํ˜„๊ฐ€๋Šฅํ•˜๋ฉฐ, ์™„์ „ํƒ์ƒ‰์— ํ•ด๋‹นํ•œ๋‹ค.

์˜ˆ์‹œ์‚ฌ์ง„

4๊ฐœ์˜ ์ˆซ์ž์นด๋“œ์—์„œ 2๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ


์กฐํ•ฉ ์˜ˆ์ œ ์ฝ”๋“œ (1) for loop

// >> for๋ฌธ์œผ๋กœ ๊ตฌํ˜„
let input = [1, 2, 3, 4];
let count = 0;

function combination(arr) {
  // for ๋ฌธ ๊ฐœ์ˆ˜ => ๋ฝ‘๋Š” ๊ฐœ์ˆ˜ == r ==> 2
  // ์ธ๋ฑ์Šค 3, ์ฆ‰ vaule 4๊ฐ€ ์˜ค๊ฒŒ ๋˜๋ฉด
  // j๋Š” 4๊ฐ€ ๋œ๋‹ค.
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      count++;
      console.log(arr[i], arr[j]);
    }
  }
}

combination(input);
console.log(count);

/* 
1 2
1 3
1 4
2 3
2 4
3 4
6
*/

count ๋ณ€์ˆ˜๋Š” ์ด ๋ช‡๋ฒˆ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ์นด์šดํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ์ด๋ฉฐ, ๋ฝ‘๋Š” ๊ฐฏ์ˆ˜๋งŒํผ for๋ฌธ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋œ๋‹ค.
์ฒ˜์Œ์—๋Š” ๋‹ค ๋ฝ‘์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— i++์„ ํ•ด์ฃผ๊ณ , j๋Š” i ์ดํ›„์˜ ๊ฐ’๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.
๋งŒ์•ฝ i = 3 (value = 4)์ผ ๊ฒฝ์šฐ, j๋Š” index = 4๊ฐ€ ๋˜์–ด ์ž๋™์ ์œผ๋กœ for๋ฌธ์ด skip์ฒ˜๋ฆฌ ๋œ๋‹ค. -> ๋”ฐ๋ผ์„œ, ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ํ•ด์ฃผ์ง€ ์•Š์Œ


์กฐํ•ฉ ์˜ˆ์ œ ์ฝ”๋“œ (2) ์žฌ๊ท€ํ•จ์ˆ˜

// >> ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„
let Input = [1, 2, 3, 4]; // 4C2
let Output = [];
let Count = 0;

// arr, data : Output์— ์ €์žฅ๋  ๊ฐ’, 
// s : ์‚ฌ์ž‘ํ•˜๋Š” ๊ฐ’, 
// idx : ํ˜„์žฌ ์œ„์น˜(for loop starting point), 
// r : ๋๋‚˜๋Š” ๊ฐ’

function combination(arr, data, s, idx, r) {
  if (s == r) {
    Count++;
    console.log(data);
    return;
  } 
  // break ํฌ์ธํŠธ 

  for (let i = idx; arr.length - i >= r - s; i++) {
    data[s] = arr[i];
    combination(arr, data, s + 1, i + 1, r);
  }
}

combination(Input, Output, 0, 0, 2);
console.log(Count);

/*
[ 1, 2 ]
[ 1, 3 ]
[ 1, 4 ]
[ 2, 3 ]
[ 2, 4 ]
[ 3, 4 ]
6
*/

์žฌ๊ท€ํ•จ์ˆ˜์—์„œ๋Š” output์ด๋ผ๋Š” ๋ณ„๋„ array๋ฅผ ์ค˜์„œ ๋ฝ‘์€ ๊ฒƒ์„ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.
s๊ฐ€ r๊ณผ ๋™์ผํ•˜๋‹ค๋ฉด, ๋ฉˆ์ถ”๊ฒŒ ํ•ด์ฃผ๋Š” break ํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
for๋ฌธ : i๋Š” index๋งŒํผ ๋Œ๋ฉด์„œ length์—์„œ -1์„ ํ•œ๊ฒƒ์ด r - s ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„๋•Œ๋งŒ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค. data ๋ถ€๋ถ„์—๋Š” arr ๊ฐ’์„ ๋ณต์‚ฌํ•ด์ฃผ๊ณ  combination์—์„œ ๊ฐ๊ฐ์˜ ์š”์†Œ๋“ค์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„ฃ์–ด์ฃผ๋ฉฐ, s์™€ index๋Š” ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.

profile
๋Š๋ ค๋„ ์ฒœ์ฒœํžˆ ๊ผผ๊ผผํ•˜๊ฒŒ !

0๊ฐœ์˜ ๋Œ“๊ธ€