๋ฐฑํธ๋ํน์ DFS์ ์ผ์ข ์ด๋ผ๊ณ ํ์ง๋ง, ์กฐ๊ธ ๋ค๋ฅด๋ค!
์ฐ์ DFS๋ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๊น์ด ์ฐ์ ์ผ๋ก ํ์ํ๋ ๊ฒ์ด๋ค.
๋ฐ๋ฉด์, ๋ฐฑํธ๋ํน์ ๋ถํ์ํ ๊ฒฝ๋ก๋ ๊ตณ์ด ํ์ํ์ง ์๊ณ , ํ์ํ ํ์๊ฐ ์๋ค๊ณ ํ๋จํ๋ฉด ๋๊น์ง ํ์ํ์ง ์๋ ๊ฒ์ด๋ค.
๋ ๋ค ์ผ๋ฐ์ ์ผ๋ก๋ ์ฌ๊ท ํจ์๋ก ๊ตฌํํ๋ค.
๋ฐฑ์ค์ ๋ํ์ ์ธ ๋ฐฑํธ๋ํน ์ฐ์ต ๋ฌธ์ ์ธ N๊ณผ M ์๋ฆฌ์ฆ๋ฅผ ๋ชจ๋ ํ์ด๋ณด์๋ค.
1.
https://www.acmicpc.net/problem/15649
15649๋ฒ: N๊ณผ M (1)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ ์ค๋ณต ์์ด M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
import sys
from itertools import permutations
n,m=map(int, sys.stdin.readline().split(' '))
# itertools permutaions์ผ๋ก ํ์ด๋ด๋ ๊ฒฝ์ฐ
# nlist=list(range(1,n+1))
# perm=list(permutations(nlist,m))
#
# for p in perm:
# print(*p, sep=' ')
# dfs๋ฅผ ์ด์ฉํ ๋ฐฑํธ๋ํน์ผ๋ก ํ์ด๋ด๋ ๊ฒฝ์ฐ
visited=[0]*(n+1)
arr=[0]*(m)
def dfs(cnt):
if cnt==m:
print(*arr, sep=' ')
return
for i in range(1,n+1):
# ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์์ธ ๊ฒฝ์ฐ
if visited[i]==0:
visited[i]=1
arr[cnt]=i
dfs(cnt+1)
visited[i]=0
dfs(0)
1๋ถํฐ N๊น์ง์ ์์ฐ์ ์ค ์ค๋ณต์์ด M๊ฐ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ด๊ณ , ๋ฝ๋ ์์๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์๋ก ๊ฐ์ฃผํ๊ธฐ ๋๋ฌธ์ ('1 4'!='4 1')
์์ด์ ์๊ฐํด์ itertools์ permutations๋ก ๊ฐ๋จํ๊ฒ ํ ์ ์๋ค.
ํ์ง๋ง, ๋ฐฑํธ๋ํน์ ์ด์ฉํด์ ํ๊ธฐ๋ก ํ๊ธฐ ๋๋ฌธ์ DFS๋ฅผ ์ด์ฉํ ๋ฐฑํธ๋ํน์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์๋ค.
DFS๋ก ์์ด/์กฐํฉ์ ๊ตฌํํ๋ ๋ฐฉ์๊ณผ ๋น์ทํ๋ค. cnt ๋ณ์๋ฅผ ์ด์ฉํด์ ํ์ฌ ๊น์ง ๊ณ ๋ฅธ ์์ ๊ฐ์๋ฅผ ์นด์ดํ ํด์ฃผ๊ณ , cnt ๋ณ์๊ฐ m์ด ๋๋ฉด m๊ฐ ๋งํผ ์๋ฅผ ๊ณจ๋๋ค๋ ๋ป์ด๋ฏ๋ก arr์ ์ ์ฅํด๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํด์ค๋ค.
์์ง cnt ๋ณ์๋ฅผ ์ฑ์ฐ์ง ๋ชปํด ์๋ฅผ ๋ ๋ฝ์์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด for ๋ฌธ ํ์์ ํตํด ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์๋ฅผ ์ฐพ๊ณ , ํด๋น ์๋ฅผ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค ๋ค ํ์ฌ arr[cnt](1์ ๊ณ ๋ฅด๊ณ , 4๋ฅผ ๊ณ ๋ฅธ ๊ฒฝ์ฐ๋ผ๋ฉด arr[0]=1, arr[1]=4,..)์ ํ์ฌ ์๋ฅผ ํ ๋นํด์ฃผ๊ณ , cnt+1์ ๋๊ฒจ์ค DFS ์ฌ๊ท ํ์์ ๋ฐ๋ณตํ๋ค.
ํด๋น ์ฌ๊ท ํ์์ด ๋๋๋ฉด ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํด์คฌ๋ ์๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์์ ์๋ก ์ฒ๋ฆฌํด์ฃผ๊ณ , ๋ค์ for๋ฌธ์ ํ์ํ๋ฉด์ ์ ํํ ์ ์๋ ๋ค์ ์๋ฅผ ์ฐพ๋๋ค.
๋ค์ N๊ณผ M ์๋ฆฌ์ฆ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์กฐ๊ธ์ฉ ๋ณํ๋ ๋ฟ, ์ด์ ๊ฐ์ ํ์์ด ๋ฐ๋ณต๋๋ค.
2.
https://www.acmicpc.net/problem/15650
15650๋ฒ: N๊ณผ M (2)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ ์ค๋ณต ์์ด M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ณ ๋ฅธ ์์ด์ ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ค.
import sys
n,m=map(int, sys.stdin.readline().split(' '))
# 1~n ๊น์ง์ ์์ฐ์ ์ค m๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด, ๊ณ ๋ฅธ ์์ด์ ์ค๋ฆ์ฐจ์์ด์ด์ผ ํจ
visited=[0]*(n+1)
arr=[0]*(m)
def dfs(cnt, num):
if cnt==m:
print(*arr, sep=' ')
return
for i in range(num+1, n+1):
if visited[i]==0:
visited[i]=1
arr[cnt]=i
dfs(cnt+1, i)
visited[i]=0
dfs(0,0)
1๋ฒ ์๋ฆฌ์ฆ์ ๋ฌ๋ฆฌ, ๊ณ ๋ฅธ ์์ด์ด ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ฏ๋ก ์ด๋ฏธ ๊ณ ๋ฅธ ์๋ณด๋ค ํฐ ์๋ง์ ์ ํํ ์ ์๋๋ก for๋ฌธ ํ์์ ๋ฒ์๋ฅผ range(1, n+1)์ด ์๋๋ผ, ์ ํ ํ dfs์ ๋งค๊ฐ ๋ณ์๋ก ๋์ด์จ num ๊ฐ๋ณด๋ค +1์ธ ์๋ถํฐ n+1๊น์ง ํ์ํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค.(range(num+1, n+1))
3.
https://www.acmicpc.net/problem/15651
15651๋ฒ: N๊ณผ M (3)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.
import sys
n,m=map(int, sys.stdin.readline().split(' '))
arr=[0]*m
def dfs(cnt):
if cnt==m:
print(*arr,sep=' ')
return
for i in range(1,n+1):
arr[cnt]=i
dfs(cnt+1)
dfs(0)
1๋ฒ ์๋ฆฌ์ฆ์ ๋น๊ตํ์ ๋, ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค๋ ์ ์ด ๋ค๋ฅด๋ค! ์ฆ, ์ด๋ฏธ ๋ฝ์ ์๋ฅผ ๋ ๋ฝ์๋ ๋๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ด๋ฏธ ๋ฝ์ ์์ธ์ง ํ์ธํ๋ visited ๋ฐฐ์ด์ด ํ์ ์์ด์ง๋ค.
4.
https://www.acmicpc.net/problem/15652
15652๋ฒ: N๊ณผ M (4)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.
- ๊ณ ๋ฅธ ์์ด์ ๋น๋ด๋ฆผ์ฐจ์์ด์ด์ผ ํ๋ค.
- ๊ธธ์ด๊ฐ K์ธ ์์ด A๊ฐ A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK๋ฅผ ๋ง์กฑํ๋ฉด, ๋น๋ด๋ฆผ์ฐจ์์ด๋ผ๊ณ ํ๋ค.
import sys
n,m=map(int, sys.stdin.readline().split(' '))
arr=[0]*m
def dfs(cnt, num):
if cnt==m:
print(*arr,sep=' ')
return
for i in range(num,n+1):
arr[cnt]=i
dfs(cnt+1, i)
dfs(0,1)
3๋ฒ ์๋ฆฌ์ฆ์ ๋น๊ตํ์ ๋ ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ฝ์๋ ๋๋ค๋ ๊ฒ์ ๋์ผํ์ง๋ง, ์ด๋ฒ์ ์ด๋ฏธ ๋ฝ์ ์๋ณด๋ค ๊ฐ๊ฑฐ๋ ํฐ ๊ฒฝ์ฐ์๋ง ์ ํํ ์ ์๋ค.
๊ทธ๋์ dfs ์์ for๋ฌธ์ range(num, n+1)๋ก ์ ์ธํด์ ํ์ฌ ์๋ถํฐ n๊น์ง๋ง ์ ํํ ์ ์๋๋ก ์ ํํ๋ค.
5.
https://www.acmicpc.net/problem/15654
15654๋ฒ: N๊ณผ M (5)
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค. N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
www.acmicpc.net
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
import sys
n,m=map(int, sys.stdin.readline().split(' '))
nlist=list(map(int, sys.stdin.readline().split(' ')))
nlist.sort()
visited=[0]*(n)
arr=[0]*(m)
def dfs(cnt):
if cnt==m:
print(*arr, sep=' ')
return
for i in range(n):
if visited[i]==0:
arr[cnt]=nlist[i]
visited[i]=1
dfs(cnt+1)
visited[i]=0
dfs(0)
5๋ฒ๋ถํฐ๋ 1๋ถํฐ N๊น์ง์ ์ ์ค M๊ฐ๋ฅผ ๋ฝ๋ ๊ฒ ์๋๋ผ, ์ ๋ ฅ์ผ๋ก ์ ์๋ N๊ฐ์ ์ ์ค M๊ฐ๋ฅผ ๋ฝ๋ ๊ฒ์ด๋ค!
nlist ๋ฐฐ์ด์ N๊ฐ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ ์ฅํ๊ณ , ์ฌ์ ์์ผ๋ก ์ถ๋ ฅํด์ผ ๋๊ธฐ ๋๋ฌธ์ nlist๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ค๋ค.
- 1~4๋ฒ๊น์ง๋ 1๋ถํฐ n๊น์ง ์์ฐจ์ ์ผ๋ก ํ์ํ๋ฏ๋ก, ์ ๋ ฌ์ด ํ์์์์ง๋ง ์ ๋ ฌ๋์ง ์์ ์์ด์ ์ ๋ ฅ๋ฐ๋ 5๋ฒ๋ถํฐ๋ ์ ๋ ฌ์ด ํ์ํ๋ค.
์ง๊ธ๊น์ง ํ์ด์๋ ๋ฐฉ์๊ณผ ๊ฐ์ด arr[cnt]์ nlist[i]๋ฅผ ์ ์ฅํด์ฃผ๊ณ ํด๋น ์ธ๋ฑ์ค์ ๋ฐฉ๋ฌธํ๋ค๊ณ visited ๋ฐฐ์ด์ 1๋ก ๊ฐฑ์ ํด์ค ๋ค์ dfs ํ์์ ํตํด์ cnt์ ๊ฐ์๊ฐ m์ด ๋๋ฉด arr๋ฅผ ์ถ๋ ฅํ๋ ๋ฐฉ์์ ๋ฐ๋ณตํ๋ค.
6.
https://www.acmicpc.net/problem/15655
15655๋ฒ: N๊ณผ M (6)
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค. N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
www.acmicpc.net
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ณ ๋ฅธ ์์ด์ ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ค.
import sys
n,m=map(int, sys.stdin.readline().split(' '))
nlist=list(map(int, sys.stdin.readline().split(' ')))
nlist.sort()
visited=[0]*n
arr=[0]*m
def dfs(cnt,num):
if cnt==m:
print(*arr, sep=' ')
return
for i in range(num+1, n):
if visited[i]==0:
arr[cnt]=nlist[i]
visited[i]=1
dfs(cnt+1, i)
visited[i]=0
dfs(0,-1)
5๋ฒ๊ณผ ๋น๊ตํ์ ๋ ์ ํํ ์์ด์ด ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ฏ๋ก ์์ ์ฌ์ฉํ๋ ๋ฐฉ์๋๋ก nlist๋ฅผ ์ ๋ ฌํด์ค ๋ค์ ์ด๋ฏธ ์ ํํ ์ธ๋ฑ์ค๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ง for๋ฌธ ํ์์ ํ ์ ์๋๋ก range(num+1, n)์ผ๋ก ์ค์ ํด์ค๋ค.
7.
https://www.acmicpc.net/problem/15656
15656๋ฒ: N๊ณผ M (7)
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค. N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
www.acmicpc.net
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.
import sys
n,m=map(int, sys.stdin.readline().split(' '))
nlist=list(map(int, sys.stdin.readline().split(' ')))
nlist.sort()
arr=[0]*m
def dfs(cnt):
if cnt==m:
print(*arr, sep=' ')
return
for i in range(n):
arr[cnt]=nlist[i]
dfs(cnt+1)
dfs(0)
5๋ฒ๊ณผ ๋ฌ๋ฆฌ ์ด๋ฏธ ์ ํํ ์๋ฅผ ๋ ์ ํํ ์ ์์ผ๋ฏ๋ก visited ๋ฐฐ์ด์ด ํ์์์ด์ก๋ค.
8.
https://www.acmicpc.net/problem/15657
15657๋ฒ: N๊ณผ M (8)
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค. N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
www.acmicpc.net
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.
- ๊ณ ๋ฅธ ์์ด์ ๋น๋ด๋ฆผ์ฐจ์์ด์ด์ผ ํ๋ค.
- ๊ธธ์ด๊ฐ K์ธ ์์ด A๊ฐ A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK๋ฅผ ๋ง์กฑํ๋ฉด, ๋น๋ด๋ฆผ์ฐจ์์ด๋ผ๊ณ ํ๋ค.
import sys
n,m=map(int, sys.stdin.readline().split(' '))
nlist=list(map(int, sys.stdin.readline().split(' ')))
nlist.sort()
arr=[0]*m
def dfs(cnt, num):
if cnt==m:
print(*arr, sep=' ')
return
for i in range(num, n):
arr[cnt]=nlist[i]
dfs(cnt+1, i)
dfs(0,0)
7๋ฒ๊ณผ ๋ฌ๋ฆฌ, ๊ณ ๋ฅธ ์์ด์ด ๋น๋ด๋ฆผ์ฐจ์์ด์ด์ผ ํ๋ฏ๋ก, for๋ฌธ ํ์์ ๋ฒ์๋ฅผ range(num, n)์ผ๋ก ์ค์ ํด์ค๋ค.
9.
https://www.acmicpc.net/problem/15663
15663๋ฒ: N๊ณผ M (9)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
import sys
n,m=map(int, sys.stdin.readline().split(' '))
nlist=list(map(int, sys.stdin.readline().split(' ')))
visited=[0]*n
arr=[0]*m
ans=set()
def dfs(cnt):
if cnt==m:
ans.add(' '.join(map(str,arr)))
return
for i in range(n):
if visited[i]==0:
visited[i]=1
arr[cnt]=nlist[i]
dfs(cnt+1)
visited[i]=0
dfs(0)
for s in sorted(ans,key=lambda x:list(map(int,x.split(' ')))):
print(s)
์ด์ ๊น์ง ํ์๋ ๋ฌธ์ ๋ค๊ณผ ๋ฌ๋ฆฌ ์ ๋ ฅ๋๋ N๊ฐ์ ์์ฐ์ ์ค ์ค๋ณต๋๋ ์๊ฐ ์กด์ฌํ๋ค.
์๋ฅผ ๋ค์ด, 1 7 9 9์ ๊ฐ์ ์์ฐ์๋ค์ด ์ ๋ ฅ๋๋ ๊ฒ์ด๋ค!
์ด์ ๊ณผ ๊ฐ์ด ํ์ดํ๋ฉด 9๊ฐ ๋ ๊ฐ์ด๋ฏ๋ก 1 9, 1 9์ ๊ฐ์ด ์์น๋ ๋ค๋ฅด์ง๋ง ๊ฒฐ๊ณผ๋ ๋๊ฐ์ ๊ฒฝ์ฐ์ ์๊ฐ ๋์ค๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ์ ์์ ์ค๋ณต์ ์ ๊ฑฐํด์ฃผ๊ธฐ ์ํด์ cnt๊ฐ m๊ฐ๊ฐ ๋๋ฉด arr๋ฅผ ๋ฌธ์์ด ํํ๋ก ๋ณ๊ฒฝํ์ฌ ans set์ ์ถ๊ฐํด์ฃผ๋ฉด์ ์ค๋ณต์ ์ ๊ฑฐํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ set ์๋ฃํ์ ๋ฐ์ดํฐ์ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ์ ํด์ ์ถ๋ ฅํด์ค์ผ ํ๋๋ฐ, ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ฃผ๋ฉด ์ ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋๊ธธ ์ํ๋ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ถํฉํ์ง ์๋๋ค. ('9 10', '10 9'๋ผ๋ ์์๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ฃผ๋ฉด '10 9'๊ฐ ๋จผ์ ์๋ฒ๋ฆฐ๋ค.)
๊ทธ๋์ sorted ํจ์์ key๋ก ์์๋ฅผ ์ ์ ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํด์ค ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ค ์ ์๋๋ก x:list(map(int, x.split(' ')))๋ฅผ lambda ๊ฐ์ผ๋ก ํ ๋นํ๋ค.
10.
https://www.acmicpc.net/problem/15664
15664๋ฒ: N๊ณผ M (10)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ณ ๋ฅธ ์์ด์ ๋น๋ด๋ฆผ์ฐจ์์ด์ด์ผ ํ๋ค.
- ๊ธธ์ด๊ฐ K์ธ ์์ด A๊ฐ A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK๋ฅผ ๋ง์กฑํ๋ฉด, ๋น๋ด๋ฆผ์ฐจ์์ด๋ผ๊ณ ํ๋ค.
import sys
input=sys.stdin.readline
n,m=map(int, input().split(' '))
nlist=list(map(int, input().split(' ')))
nlist.sort()
visited=[0]*n
arr=[0]*m
ans=set()
def dfs(cnt, num):
if cnt==m:
ans.add(' '.join(map(str, arr)))
return
for i in range(num+1,n):
if visited[i]==0:
visited[i]=1
arr[cnt]=nlist[i]
dfs(cnt+1, i)
visited[i]=0
dfs(0,-1)
for s in sorted(ans, key=lambda x:list(map(int, x.split(' ')))):
print(s)
9๋ฒ๊ณผ ๋ฌ๋ฆฌ ๋น๋ด๋ฆผ์ฐจ์์ผ๋ก ์๋ฅผ ๋ฝ์์ผ ํ๋ฏ๋ก, nlist๋ฅผ ์ ๋ ฌํด์ฃผ๊ณ , for๋ฌธ์ ๋ฒ์๋ฅผ range(num+1, n)์ผ๋ก ์ค์ ํด์ค๋ค.
11.
https://www.acmicpc.net/problem/15665
15665๋ฒ: N๊ณผ M (11)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.
import sys
n,m=map(int, sys.stdin.readline().split(' '))
nlist=list(map(int, sys.stdin.readline().split(' ')))
arr=[0]*m
ans=set()
def dfs(cnt):
if cnt==m:
ans.add(' '.join(map(str,arr)))
return
for i in range(n):
arr[cnt]=nlist[i]
dfs(cnt+1)
dfs(0)
for s in sorted(ans, key=lambda x:list(map(int, x.split(' ')))):
print(s)
9๋ฒ๊ณผ ๋ฌ๋ฆฌ, ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ฝ์๋ ๋๋ฏ๋ก, visited ๋ฐฐ์ด์ด ํ์์์ด์ง๋ค.
12.
https://www.acmicpc.net/problem/15666
15666๋ฒ: N๊ณผ M (12)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.
- ๊ณ ๋ฅธ ์์ด์ ๋น๋ด๋ฆผ์ฐจ์์ด์ด์ผ ํ๋ค.
- ๊ธธ์ด๊ฐ K์ธ ์์ด A๊ฐ A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK๋ฅผ ๋ง์กฑํ๋ฉด, ๋น๋ด๋ฆผ์ฐจ์์ด๋ผ๊ณ ํ๋ค.
import sys
n,m=map(int, sys.stdin.readline().split(' '))
nlist=list(map(int, sys.stdin.readline().split(' ')))
nlist.sort()
arr=[0]*m
ans=set()
def dfs(cnt, num):
if cnt==m:
ans.add(' '.join(map(str, arr)))
return
for i in range(num, n):
arr[cnt]=nlist[i]
dfs(cnt+1, i)
dfs(0,0)
for s in sorted(ans, key=lambda x:list(map(int, x.split(' ')))):
print(s)
11๋ฒ๊ณผ ๋ฌ๋ฆฌ, ๋น๋ด๋ฆผ์ฐจ์์ผ๋ก ์๋ฅผ ๋ฝ์ํ ํ๋ฏ๋ก nlist๋ฅผ ์ ๋ ฌํด์ฃผ๊ณ for๋ฌธ์ ๋ฒ์๋ฅผ range(num, n)์ผ๋ก ์ค์ ํ๋ค.
์ ๋ฌธ์ ๋ค์ DFS ๋ฐ๋ณต์ ํตํด ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ์ง๋ง, cnt์ ๊ฐ์ด ๋ฝ๊ณ ์ ํ๋ ์์ธ m๋งํผ์ด๋ฉด ๋ ์ด์ ํ์ํ์ง ์๊ณ returnํ๋ค๋ ์ ์์ ๋ฐฑํธ๋ํน์ ์ฐ์ตํ๊ธฐ์ ์ข์ ๋ฌธ์ ๋ค์ด๋ค!
๋, ์์ด/์กฐํฉ์ itertools์ combinations/permutations๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ถฉ๋ถํ ์ฐ์ตํ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑํธ๋ํน' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 16987 ๐ฅ] ๊ณ๋์ผ๋ก ๊ณ๋์น๊ธฐ (1) | 2023.11.30 |
---|---|
[๋ฐฑ์ค 2800 ๐ฅ] ๊ดํธ ์ ๊ฑฐ (1) | 2023.11.30 |