์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑํŠธ๋ž˜ํ‚น

[๋ฐฑ์ค€ ๋ฐฑํŠธ๋ž˜ํ‚น] N๊ณผ M ์‹œ๋ฆฌ์ฆˆ(1~12)

1eehyunji 2023. 11. 7. 17:29

๋ฐฑํŠธ๋ž˜ํ‚น์€ 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๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ถฉ๋ถ„ํžˆ ์—ฐ์Šตํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.