์•Œ๊ณ ๋ฆฌ์ฆ˜

[0์ฃผ์ฐจ] ์ˆœ์—ด(permutation)๊ณผ ์กฐํ•ฉ(combination) - ์ˆœ์—ดํŽธ

499.token.required 2024. 12. 28. 03:22

 

๐Ÿ“Œ ์ˆœ์—ด๊ณผ ์กฐํ•ฉ

 

์ˆœ์—ด(permutation)์ด๋ž€ ?

 

n ๋ช…์ค‘์˜ r๋ช…์„ ๋ฝ‘์•„์„œ ์ค„์„ธ์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

 

 

 

 

์กฐํ•ฉ(combination)์ด๋ž€ ?

 

์ˆœ์„œ์˜ ๊ณ ๋ ค ์—†์ด ๋‹จ์ˆœํ•˜๊ฒŒ ์„ ํƒ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜, n ๋ช…์ค‘์˜ r๋ช…์„ ๋ฝ‘๊ธฐ๋งŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

โ€‹โ€‹

 

 

4C2๋ฅผ ๊ตฌํ•˜๋Š” ๊ณต์‹์€ ์ˆœ์—ด์„ ๊ตฌํ•˜๋Š” ๊ณต์‹๋ณด๋‹ค๋Š” ์กฐ๊ธˆ ์–ด๋ ต๋‹ค. ์•„์ด๋Ÿฌ๋‹ˆํ•˜๊ฒŒ๋„ ์กฐํ•ฉ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ˆœ์—ด์„ ๋จผ์ € ๊ตฌํ•œ ํ›„, ์ œ๊ฑฐ์‹œํ‚ค๋ฉด ๋œ๋‹ค. (์ €์งˆ๋Ÿฌ๋†“๊ณ  ์ทจ์†Œํ•˜๋Š” ๋ฐฉ์‹) ์ฆ‰ 4C2 = 4P2/2!  ์ด ๋œ๋‹ค.

 

 

 

์ˆœ์—ด์„ ๋จผ์ € ๊ตฌํ•œ ํ›„, ํŒฉํ† ๋ฆฌ์–ผ๋กœ ๋‚˜๋ˆ„๋ฉด ์กฐํ•ฉ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

๐Ÿ“Œ C++ ์—์„œ์˜ ์ˆœ์—ด next_permutation(from,to) / prev_permutation(from,to)

 

C++ ์—์„œ๋Š” ์ˆœ์—ด์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฏธ๋ฆฌ ์ค€๋น„๋˜์–ด ์žˆ๋‹ค.  ๊ทธ ์ค‘ next_permutation() ํ•จ์ˆ˜๋Š” ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์œผ๋กœ ์ˆœ์—ด์„ ๋งŒ๋“ ๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด prev_permutation์€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆœ์—ด์„ ๋งŒ๋“ ๋‹ค.

 

์šฐ์„ ์€ next_permutation()  ํ•จ์ˆ˜์˜ ์“ฐ๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž.

 

next_permutation() ์˜ ์กฐ๊ฑด 

 

  • next_permutation()์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์šฐ์„  ํ—ค๋”์— <algorithm> ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.
  •  ๋ฐฐ์—ด์ด sorting ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค

 

next_permutation() ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ

 

  • ์šฐ์„  from์€ ๋ฐฐ์—ด์˜ ์‹œ์ž‘์„ ์˜๋ฏธํ•œ๋‹ค.
  • to๋Š” ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์ด ์•„๋‹Œ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„ ๋‹ค์Œ์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์ฃผ์–ด์•ผํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 2์ธ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๋ฉด  next_purmuation(0,2)์ด ๋“ค์–ด๊ฐ€ ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

next_permutation() ์˜ˆ์ œ ์ฝ”๋“œ

 

 

 

 

์ฝ”๋“œ ์ˆœ์„œ 

 

  • ์ดˆ๊ธฐ ๋ฐฐ์—ด: a = {1, 2, 3}. 
  • ์ถœ๋ ฅ: 1 2 3 (for๋ฌธ์ด ์ฒซ ๋ฒˆ์งธ ์ถœ๋ ฅ๋ฌธ๋งŒ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ).
  • std::next_permutation์„ ํ˜ธ์ถœํ•ด ๋‹ค์Œ ์ˆœ์—ด์„ ๊ณ„์‚ฐ.
  • ๋ฐฐ์—ด์ด ๋ณ€๊ฒฝ: a = {1, 3, 2}.
  • ์ถœ๋ ฅ: 1 3 2.
  • ์œ„ ๊ณผ์ • ๋ฐ˜๋ณต.
  • ์ˆœ์—ด์ด ๋๋‚˜๋ฉด(๋งˆ์ง€๋ง‰ ์ˆœ์—ด: 3 2 1), ๋ฃจํ”„ ์ข…๋ฃŒ.

 

 

next_permutation() ์‘์šฉ

 

์ง€๊ธˆ๊นŒ์ง€ ์ˆœ์—ด์ด ๋  ์ˆ˜ ์žˆ๋Š” 3P3์„ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค๋ฉด 5P3์ฒ˜๋Ÿผ ๋ชจ๋“  ์ˆ˜๊ฐ€ ์•„๋‹Œ ํŠน์ • ์ˆ˜๋ฅผ ๋ฝ‘์•„์„œ ์ถœ๋ ฅํ•ด๋ณด๋„๋ก ํ•˜์ž. ๋ฐฉ๋ฒ•์€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๋‹ค.

 

 

 

  • ์ดˆ๊ธฐ ๋ฐฐ์—ด: a = {1, 2, 3, 4, 5}.
  • ์ง‘ํ•ฉ(set) ์„ ์–ธ : set<string> unique_results;
  • ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ์™€ ๊ณต๋ฐฑ ๊ทธ๋ฆฌ๊ณ  ๋‘ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค์–ด result์— ์ €์žฅ
  • ์ €์žฅ๋œ result๋ฅผ ์„ ์–ธํ•˜์—ฌ ์„ ์–ธํ•˜์˜€๋˜ ์ง‘ํ•ฉ์— ์›์†Œ๋กœ ์ถ”๊ฐ€ 
  • ์œ„ ๊ณผ์ • ๋ฐ˜๋ณต
  • ์ค‘๋ณต ์ œ๊ฑฐ๋œ ์ง‘ํ•ฉ๋“ค์˜ ์›์†Œ๋ฅผ ์ถœ๋ ฅ ํ›„ ๊ฐœํ–‰ 

 

๐Ÿ“Œ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ์ˆœ์—ด

 

๋‹จ์ˆœํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌํ˜„๋œ ํ•จ์ˆ˜๋กœ ์ˆœ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์•˜์ง€๋งŒ, ์ง์ ‘ ์ˆœ์—ด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์› ๋‹ค.

๊ทธ ์ด์œ ๋Š” ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด์•ผํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋™์ ์ธ ์ธ๋ฑ์Šค ๋•Œ๋ฌธ์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

 

๐Ÿ“Œ Pseudo Code 

1) ๊ธฐ์ €์‚ฌ๋ก€ : ๊นŠ์ด๊ฐ€ ์กฐํ•ฉํ•˜๋ ค๋Š” ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด -> if(depth == k) 

2) ๋ฐฐ์—ด์˜ ๊นŠ์ด๋ถ€ํ„ฐ n ๋งŒํผ ๋ฐ˜๋ณต -> for (int i = depth; i < n; i++)

2-1) i๋ฒˆ์งธ ์š”์†Œ์™€ depth ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ตํ™˜ -> swap(a[i],a[depth]

2-2) ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ -> permutation(depth+1)

2-3) ์›์ƒ ๋ณต๊ตฌ  -> swap(a[i]) , a[depth])

 

 

์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•ด์•ผํ•  ์ ์€ makePrmutation์˜ ํ•จ์ˆ˜ ๋ถ€๋ถ„์ด๊ณ , ๊ทธ ์ค‘์—์„œ๋„ ๋ฐ˜๋ณต๋ฌธ๊ณผ ์žฌ๊ท€ํ•จ์ˆ˜์ด๋‹ค.

๋‹ค์Œ์€ C++ ๋ฐฑํŠธ๋ž˜ํ‚น ์ฝ”๋“œ๊ฐ€ n = 3, r = 3์ผ ๋•Œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์–ด๋–ป๊ฒŒ ์ˆœ์ฐจ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๊ณ  ๋ฐ˜ํ™˜๋˜๋Š”์ง€, ์ด 31๋‹จ๊ณ„์— ๊ฑธ์ณ ๋Š๊น€ ์—†์ด ์ •๋ฆฌํ•œ ํ๋ฆ„์ด๋‹ค. 

 

์ „์ฒด ํ๋ฆ„ (์„ธ๋ถ€ ๋‹จ๊ณ„)

1) ํ˜ธ์ถœ: f(3, 3, 0)

  • depth = 0, ํ˜„์žฌ v = [0, 1, 2]
  • for(i = 0 ~ 2)

2) (์ •๋ฐฉํ–ฅ swap, i=0)

  • ์‹คํ–‰: swap(v[0], v[0])
    • ๋ฒกํ„ฐ: ์—ฌ์ „ํžˆ [0, 1, 2]
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 1)

3) ํ˜ธ์ถœ: f(3, 3, 1)

  • depth = 1, ํ˜„์žฌ v = [0, 1, 2]
  • for(i = 1 ~ 2)

4) (์ •๋ฐฉํ–ฅ swap, i=1)

  • ์‹คํ–‰: swap(v[1], v[1])
    • ๋ฒกํ„ฐ: [0, 1, 2](๋ณ€ํ™” ์—†์Œ)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 2)

5) ํ˜ธ์ถœ: f(3, 3, 2)

  • depth = 2, ํ˜„์žฌ v = [0, 1, 2]
  • for(i = 2 ~ 2) → ์œ ์ผํ•œ ๋ฐ˜๋ณต i=2

6) (์ •๋ฐฉํ–ฅ swap, i=2)

  • ์‹คํ–‰: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [0, 1, 2](๋ณ€ํ™” ์—†์Œ)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 3)

7) ํ˜ธ์ถœ: f(3, 3, 3)

  • depth = 3, r = 3 → ๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ
    • ์ˆœ์—ด ์ถœ๋ ฅ: [0, 1, 2]
  • ์žฌ๊ท€ ๋ฐ˜ํ™˜

8) ๋ณต๊ท€: f(3, 3, 2)

  • ์ด์ œ ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [0, 1, 2](๋ณ€ํ™” ์—†์Œ)
  • i=2 ๋ฐ˜๋ณต ๋, for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,2) ๋ฐ˜ํ™˜

9) ๋ณต๊ท€: f(3, 3, 1)

  • ๋ฐฉ๊ธˆ i=1 ์ฒ˜๋ฆฌ ์™„๋ฃŒ
  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[1], v[1])
    • ๋ฒกํ„ฐ: [0, 1, 2]
  • for ๋ฌธ์—์„œ ๋‹ค์Œ i=2 ์ง„ํ–‰

10) (์ •๋ฐฉํ–ฅ swap, i=2, depth=1)

  • ์‹คํ–‰: swap(v[2], v[1])
    • ๋ฒกํ„ฐ: [0, 2, 1] (์ธ๋ฑ์Šค 1,2 ๊ตํ™˜)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 2)

11) ํ˜ธ์ถœ: f(3, 3, 2)

  • depth = 2, ํ˜„์žฌ v = [0, 2, 1]
  • for(i = 2 ~ 2)

12) (์ •๋ฐฉํ–ฅ swap, i=2)

  • ์‹คํ–‰: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [0, 2, 1](๋ณ€ํ™” ์—†์Œ)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 3)

13) ํ˜ธ์ถœ: f(3, 3, 3)

  • ๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ → ์ถœ๋ ฅ: [0, 2, 1]
  • ์žฌ๊ท€ ๋ฐ˜ํ™˜

14) ๋ณต๊ท€: f(3, 3, 2)

  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [0, 2, 1](๋ณ€ํ™” ์—†์Œ)
  • i=2 ๋, for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,2) ๋ฐ˜ํ™˜

15) ๋ณต๊ท€: f(3, 3, 1)

  • ๋ฐฉ๊ธˆ i=2 ์ฒ˜๋ฆฌ ์™„๋ฃŒ
  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[1])
    • ๋ฒกํ„ฐ: [0, 1, 2]
  • ์ด์ œ i=1,2 ๋ชจ๋‘ ์ฒ˜๋ฆฌ → for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,1) ๋ฐ˜ํ™˜

16) ๋ณต๊ท€: f(3, 3, 0)

  • ๋ฐฉ๊ธˆ i=0 ์ฒ˜๋ฆฌ ์™„๋ฃŒ
    (์ •ํ™•ํžˆ ๋งํ•˜๋ฉด, i=0 ๋ธ”๋ก + ๊ทธ ์•ˆ์—์„œ i=1,2๊นŒ์ง€ ๋‹ค ๋๋‚œ ๊ฒƒ์ด๊ณ , ํ•จ์ˆ˜๊ฐ€ ๋Œ์•„์˜จ ์ƒํƒœ)
  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[0], v[0])
    • ๋ฒกํ„ฐ: [0, 1, 2](๋ณ€ํ™” ์—†์Œ)
  • for ๋ฌธ์—์„œ ๋‹ค์Œ i=1 ์ง„ํ–‰

17) (์ •๋ฐฉํ–ฅ swap, i=1, depth=0)

  • ์‹คํ–‰: swap(v[1], v[0])
    • ๋ฒกํ„ฐ: [1, 0, 2] (์ธ๋ฑ์Šค 0,1 ๊ตํ™˜)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 1)

18) ํ˜ธ์ถœ: f(3, 3, 1)

  • depth = 1, ํ˜„์žฌ v = [1, 0, 2]
  • for(i = 1 ~ 2)

19) (์ •๋ฐฉํ–ฅ swap, i=1)

  • ์‹คํ–‰: swap(v[1], v[1])
    • ๋ฒกํ„ฐ: [1, 0, 2](๋ณ€ํ™” ์—†์Œ)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 2)

20) ํ˜ธ์ถœ: f(3, 3, 2)

  • depth = 2, ํ˜„์žฌ v = [1, 0, 2]
  • for(i = 2 ~ 2)

21) (์ •๋ฐฉํ–ฅ swap, i=2)

  • ์‹คํ–‰: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [1, 0, 2](๋ณ€ํ™” ์—†์Œ)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 3)

22) ํ˜ธ์ถœ: f(3, 3, 3)

  • ๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ → ์ถœ๋ ฅ: [1, 0, 2]
  • ์žฌ๊ท€ ๋ฐ˜ํ™˜

23) ๋ณต๊ท€: f(3, 3, 2)

  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [1, 0, 2]
  • i=2 ๋, for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,2) ๋ฐ˜ํ™˜

24) ๋ณต๊ท€: f(3, 3, 1)

  • ๋ฐฉ๊ธˆ i=1 ์ฒ˜๋ฆฌ ์™„๋ฃŒ
  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[1], v[1])
    • ๋ฒกํ„ฐ: [1, 0, 2](๋ณ€ํ™” ์—†์Œ)
  • ๋‹ค์Œ i=2

25) (์ •๋ฐฉํ–ฅ swap, i=2, depth=1)

  • ์‹คํ–‰: swap(v[2], v[1])
    • ๋ฒกํ„ฐ: [1, 2, 0] (์ธ๋ฑ์Šค 1,2 ๊ตํ™˜)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 2)

26) ํ˜ธ์ถœ: f(3, 3, 2)

  • depth = 2, ํ˜„์žฌ v = [1, 2, 0]
  • for(i = 2 ~ 2)

27) (์ •๋ฐฉํ–ฅ swap, i=2)

  • ์‹คํ–‰: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [1, 2, 0](๋ณ€ํ™” ์—†์Œ)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 3)

28) ํ˜ธ์ถœ: f(3, 3, 3)

  • ๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ → ์ถœ๋ ฅ: [1, 2, 0]
  • ์žฌ๊ท€ ๋ฐ˜ํ™˜

29) ๋ณต๊ท€: f(3, 3, 2)

  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [1, 2, 0]
  • for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,2) ๋ฐ˜ํ™˜

30) ๋ณต๊ท€: f(3, 3, 1)

  • ๋ฐฉ๊ธˆ i=2 ์ฒ˜๋ฆฌ ์™„๋ฃŒ
  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[1])
    • ๋ฒกํ„ฐ: [1, 0, 2]
  • i=1,2 ๋ → for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,1) ๋ฐ˜ํ™˜

31) ๋ณต๊ท€: f(3, 3, 0)

  • ๋ฐฉ๊ธˆ i=1 ์ฒ˜๋ฆฌ ์™„๋ฃŒ
  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[1], v[0])
    • ๋ฒกํ„ฐ: [0, 1, 2]
  • ๋‹ค์Œ i=2

32) (์ •๋ฐฉํ–ฅ swap, i=2, depth=0)

  • ์‹คํ–‰: swap(v[2], v[0])
    • ๋ฒกํ„ฐ: [2, 1, 0]
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 1)

33) ํ˜ธ์ถœ: f(3, 3, 1)

  • depth = 1, ํ˜„์žฌ v = [2, 1, 0]
  • for(i = 1 ~ 2)

34) (์ •๋ฐฉํ–ฅ swap, i=1)

  • ์‹คํ–‰: swap(v[1], v[1])
    • ๋ฒกํ„ฐ: [2, 1, 0](๋ณ€ํ™” ์—†์Œ)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 2)

35) ํ˜ธ์ถœ: f(3, 3, 2)

  • depth = 2, v = [2, 1, 0]
  • for(i = 2 ~ 2)

36) (์ •๋ฐฉํ–ฅ swap, i=2)

  • ์‹คํ–‰: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [2, 1, 0](๋ณ€ํ™” ์—†์Œ)
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 3)

37) ํ˜ธ์ถœ: f(3, 3, 3)

  • ๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ → ์ถœ๋ ฅ: [2, 1, 0]
  • ์žฌ๊ท€ ๋ฐ˜ํ™˜

38) ๋ณต๊ท€: f(3, 3, 2)

  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [2, 1, 0]
  • i=2 ๋, for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,2) ๋ฐ˜ํ™˜

39) ๋ณต๊ท€: f(3, 3, 1)

  • ๋ฐฉ๊ธˆ i=1 ์ฒ˜๋ฆฌ ์™„๋ฃŒ
  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[1], v[1])
    • ๋ฒกํ„ฐ: [2, 1, 0](๋ณ€ํ™” ์—†์Œ)
  • ๋‹ค์Œ i=2

40) (์ •๋ฐฉํ–ฅ swap, i=2, depth=1)

  • ์‹คํ–‰: swap(v[2], v[1])
    • ๋ฒกํ„ฐ: [2, 0, 1]
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 2)

41) ํ˜ธ์ถœ: f(3, 3, 2)

  • depth = 2, ํ˜„์žฌ v = [2, 0, 1]
  • for(i = 2 ~ 2)

42) (์ •๋ฐฉํ–ฅ swap, i=2)

  • ์‹คํ–‰: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [2, 0, 1]
  • ์žฌ๊ท€ ํ˜ธ์ถœ: f(3, 3, 3)

43) ํ˜ธ์ถœ: f(3, 3, 3)

  • ๊ธฐ์ € ์กฐ๊ฑด ์ถฉ์กฑ → ์ถœ๋ ฅ: [2, 0, 1]
  • ์žฌ๊ท€ ๋ฐ˜ํ™˜

44) ๋ณต๊ท€: f(3, 3, 2)

  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[2])
    • ๋ฒกํ„ฐ: [2, 0, 1]
  • i=2 ๋, for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,2) ๋ฐ˜ํ™˜

45) ๋ณต๊ท€: f(3, 3, 1)

  • ๋ฐฉ๊ธˆ i=2 ์ฒ˜๋ฆฌ ์™„๋ฃŒ
  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[1])
    • ๋ฒกํ„ฐ: [2, 1, 0]
  • i=1,2 ๋, for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,1) ๋ฐ˜ํ™˜

46) ๋ณต๊ท€: f(3, 3, 0)

  • ๋ฐฉ๊ธˆ i=2 ์ฒ˜๋ฆฌ ์™„๋ฃŒ
  • ์—ญ๋ฐฉํ–ฅ swap: swap(v[2], v[0])
    • ๋ฒกํ„ฐ: [0, 1, 2]
  • ์ด์ œ i=0,1,2 ๋ชจ๋‘ ์ฒ˜๋ฆฌ → for ๋ฌธ ์ข…๋ฃŒ
  • ํ•จ์ˆ˜ f(3,3,0) ์™„์ „ ์ข…๋ฃŒ

์ตœ์ข… ์ถœ๋ ฅ ์ˆœ์„œ

์ค‘๊ฐ„์— ๊ธฐ์ € ์กฐ๊ฑด์—์„œ ์ถœ๋ ฅ๋œ ์ˆœ์—ด์„ ์ˆœ์„œ๋Œ€๋กœ ์ ์–ด ๋ณด๋ฉด:

  1. [0, 1, 2]
  2. [0, 2, 1]
  3. [1, 0, 2]
  4. [1, 2, 0]
  5. [2, 1, 0]
  6. [2, 0, 1]

(์ด 6๊ฐ€์ง€, 3!3!๊ฐœ)


์š”์•ฝ

  • ๊ฐ depth๋งˆ๋‹ค i = depth๋ถ€ํ„ฐ i < n๊นŒ์ง€ ๋ฐ˜๋ณต์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, swap -> ์žฌ๊ท€ -> swap(์›์ƒ๋ณต๊ตฌ) ํ˜•ํƒœ๋กœ ์ง„ํ–‰๋œ๋‹ค.
  • depth(๊นŠ์ด) = r(์„ ํƒํ•  ์›์†Œ ๊ฐœ์ˆ˜) ์— ๋„๋‹ฌํ•˜๋ฉด ๊ธฐ์ € ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์–ด ์ˆœ์—ด์„ ์ถœ๋ ฅํ•˜๊ณ  ์žฌ๊ท€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฐ˜ํ™˜ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ ์›์ƒ๋ณต๊ตฌ๋ฅผ ํ†ตํ•ด ๋ฒกํ„ฐ๊ฐ€ ์ด์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€์•ผํ•œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•ด์„œ ๊ฐœ์˜ ์ˆœ์—ด(6๊ฐœ)์ด ๋ชจ๋‘ ์ถœ๋ ฅ๋˜๊ณ , ์ตœ์ข… 46๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ์ดˆ๊ธฐ ํ˜ธ์ถœ f(3, 3, 0)์˜ ๋ฐ˜๋ณต๋ฌธ๋„ ์ข…๋ฃŒ๋˜๋ฉด์„œ ๋ชจ๋“  ์žฌ๊ท€๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋œ๋‹ค.

 

 

๐Ÿ“Œ ์‘์šฉ : 3P2๋ฅผ ๋ฝ‘๊ณ  ์‹ถ์„ ๋• ์–ด๋–ป๊ฒŒ ํ•˜์ง€ ?

 

 

 

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ถœ๋ ฅ ์‹œ์— ๊ธธ์ด(r)๋งŒํผ๋งŒ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ 3P2์ผ ๊ฒฝ์šฐ์ด๊ณ  5P2์ผ ๊ฒฝ์šฐ, ์ค‘๋ณต ์ถœ๋ ฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” set ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.