[Baekjoon/๐ฅSilverโ ก] 6603: ๋ก๋
Intro
 

์ ๊ทผ ๋ฐฉ๋ฒ๐โโ๏ธ
- 
    โ7 1 2 3 4 5 6 7โ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.  - ์ถ๋ ฅ๋๋ ๋ก๋ ๋ฒํธ๋ค์ ๋ค์์ ๊ทธ๋ํ๋ค๋ก ๋ํ๋ผ ์ ์๋ค.
- ํด๋น ๊ทธ๋ํ๋ฅผ dfs ํ์ํ๋ฉฐ ๋ชจ๋ ๋ก๋ ๋ฒํธ๋ค์ ์ถ๋ ฅํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
 
๐โโ๏ธ๊ทธ๋ ๋ค๋ฉด ํด๋น ๊ทธ๋ํ๋ ์ด๋ป๊ฒ ๋ง๋ค์ด์ง๋ ๊ฒ์ผ๊น?
- 
    ๋ชจ๋ ์๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ฃผ์ด์ง๋ค. 
- 
    ์ฐ์ ์ฒซ ๋ฒ์งธ๋ก ์ฌ ์ ์๋ ์๋ ํด๋น ์ซ์๋ฅผ ํฌํจํด ์ด 6๊ฐ์ ์๋ฅผ ์ ํํด์ผ ํ๋ฏ๋ก 'k - 6 + 1'๋ฒ์งธ ์ซ์๊น์ง๋ง ๊ฐ๋ฅํ๋ค. 
- 
    ๊ทธ ๋ค์์ ์ค๋ ์๋ ์ ๋ฐฉ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ทธ ์๋ฅผ ํฌํจํด ๊ทธ ํ ์๋ค์ ์ ํํ์ ๋ ๋ฝ์์ผํ๋ ์๋ฅผ ์ฑ์ธ ์ ์๋ ์์์ ์๊น์ง๋ง ์ ํ์ ํ๋ฉด ๋๋ค. 
์ด๋ ๊ฒ ๋ง๋ก๋ ์ค๋ช ๋ณด๋ค๋ ์ฝ๋๋ฅผ ์ง์  ๋ณด๋ ๊ฒ์ด ํจ ์ดํด๊ฐ ์ ๋ ๊ฒ์ด๋ค.
Algoritm๐ฉโ๐ป: DFS
# 21.01.11
# 6603: ๋ก๋
from copy import deepcopy
from ntpath import join
import sys
sys.setrecursionlimit(10000)
def dfs(i, queue):
  q = deepcopy(queue)
  q.append(lst[i])
  if len(q) == 6:
    print(" ".join(q))
    return
  else:
    for j in range(i+1, k-(6-len(q))+1): # ๊ฐ ์์น์ ์ฌ ์ ์๋ ์๋ค ๊ณ ๋ฅด๊ธฐ
      dfs(j, q)
while 1:
  lst = list(sys.stdin.readline().rstrip().split())
  k = int(lst[0])
  if k == 0:
    break
  lst = lst[1:]
  for i in range(0, k-5): # ์ฒซ ๋ฒ์งธ๋ก ์ฌ ์ ์๋ ์๋ค ๊ณ ๋ฅด๊ธฐ
    queue = []
    dfs(i, queue)
  print("\n", end="")

โ์์ด, ์กฐํฉ, ๊ณฑ์งํฉ
โ์์ด: Permutation
- ์๋ก ๋ค๋ฅธ n๊ฐ ์ค์์ r๊ฐ๋ฅผ ๊ณจ๋ผ ์์๋ฅผ ์ ํด์ ๋์ดํ ๊ฒ
- (A, B) != (B, A)
  import itertools
  lst = [1, 2, 3]
  nPr = itertools.permutations(lst, 2)
  print(list(nPr))
- ๊ฒฐ๊ณผ: [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
โ์กฐํฉ: Combination
- ์๋ก ๋ค๋ฅธ n๊ฐ ์ค์์ r๊ฐ๋ฅผ ๊ณจ๋ผ ๋์ดํ ๊ฒ
- (A, B) == (B, A)
  import itertools
  lst = [1, 2, 3]
  nCr = itertools.combinations(lst, 2)
  print(list(nCr))
- ๊ฒฐ๊ณผ: [(1, 2), (1, 3), (2, 3)]
โ๊ณฑ์งํฉ: Cartesian product
- ์ฌ๋ฌ ์งํฉ๋ค์์ ํ๋์ฉ ๋ฝ์ ๋ง๋ ์กฐํฉ๋ค
  import itertools
  lst1 = [1, 2, 3]
  lst2 = ['a', 'b', 'c']
  result = itertools.product(lst1, lst2)
  print(list(result))
- ๊ฒฐ๊ณผ: [(1, โaโ), (1, โbโ), (1, โcโ), (2, โaโ), (2, โbโ), (2, โcโ), (3, โaโ), (3, โbโ), (3, โcโ)]
Algoritm๐ฉโ๐ป: combination
- ๊ทธ๋ ๋ค๋ฉด ์์์ ์์๋ณธ combination์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด์.
import itertools, sys
while 1:
  lst = list(sys.stdin.readline().rstrip().split())
  k = int(lst[0])
  if k == 0:
    break
  result = list(itertools.combinations(lst[1:], 6))
  for i in result:
    print(" ".join(i))
  print()

์ฐธ๊ณ ๐
- https://velog.io/@dramatic/Python-permutation-combination-%EC%88%9C%EC%97%B4%EA%B3%BC-%EC%A1%B0%ED%95%A9
- https://ourcstory.tistory.com/414
- https://pacific-ocean.tistory.com/238
- https://velog.io/@dramatic/Python-permutation-combination-%EC%88%9C%EC%97%B4%EA%B3%BC-%EC%A1%B0%ED%95%A9
- https://brownbears.tistory.com/453
๊ทธ๋ผ!! ์ด๋ฒ ํฌ์คํ ์ ์ฌ๊ธฐ์!!
๋!! ~(หโพห~)
 
      
    
๋๊ธ๋จ๊ธฐ๊ธฐ