๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

[๋ฐฑ์ค€] [Python] 15650๋ฒˆ_N๊ณผM(2)_๋ฐฑํŠธ๋ž˜ํ‚น

Dbswnstjd 2022. 10. 11. 20:26

๋ฌธ์ œ

https://www.acmicpc.net/problem/15650

 

15650๋ฒˆ: N๊ณผ M (2)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด

www.acmicpc.net

 

ํ’€์ด

1. DFS๋ฅผ ํ†ตํ•œ ํ’€์ด

# ๋ฐฑ์ค€ 15650๋ฒˆ ๋ฌธ์ œ - N ๊ณผ M (2)
N, M = map(int, input().split())
visited = [0 for _ in range(N)]
arr = []

def dfs(cnt):
    if cnt == M:
        print(*arr)
        return

    for i in range(N):
        if visited[i] == 0:
            visited[i] = 1  # ์ค‘๋ณต ์ œ๊ฑฐ
            arr.append(i+1)

            dfs(cnt+1)  # ๋‹ค์Œ ๊นŠ์ด ํƒ์ƒ‰
            arr.pop()  # ํƒ์‚ฌํ•œ ๋‚ด์šฉ ์ œ๊ฑฐ

            # ์ˆœ์—ด ๋ถ€๋ถ„๊ณผ์˜ ์ฐจ์ด์ 
            for j in range(i+1, N):
                visited[j] = 0

dfs(0)

2. Combination์„ ํ†ตํ•œ ํ’€์ด

from itertools import combinations

N, M = map(int, input().split())

p = combinations(range(1, N+1), M)
for i in p:
    print(*i)