[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
๊ทธ๋ผ!! ์ด๋ฒ ํฌ์คํ ์ ์ฌ๊ธฐ์!!
๋!! ~(หโพห~)
๋๊ธ๋จ๊ธฐ๊ธฐ