ํฐ์คํ ๋ฆฌ ๋ทฐ
N๊ณผ M ์๋ฆฌ์ฆ
- ์์๊ฐ 1์์ N์ธ ๊ฒฝ์ฐ
-
์์๊ฐ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ
- N๊ณผ M (5 ~ 8)
- N๊ณผ M (1 ~ 4)์์ ์์์ ๋ํ ์ฒ๋ฆฌ๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
-
์ค๋ณต ์์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ
- 15663 N๊ณผ M (9)
- N๊ณผ M (10 ~ 12)๋ (9)์ ๊ฐ์ด set์ ํ์ฉํ๋ฉฐ ๋ก์ง์ N๊ณผ M 2 - 4์ ๋์ผํ๋ค.
๋ฌธ์
๋ฌธ์ ํ์ด
N๊ฐ์ ์์ฐ์์์ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ์ด๋ DFS๋ฅผ ํตํด ์ฝ๊ฒ ํ ์ ์์ผ๋ฉฐ, ํ์ด์ฌ์ ๊ฒฝ์ฐ itertools๋ฅผ ์ด์ฉํด ํ ์ ์๋ค. ํ์ง๋ง ์ผ์ฑ ์ฝ๋ฉ ํ ์คํธ์์๋ itertools๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ๋ค์๋ค. ๋ฐ๋ผ์ ๋จ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์๋, ์ด๋ค ์๋ฆฌ๋ก ๋ต์ ๊ตฌํ ์ ์๋๊ฐ์ ๋ํด ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค.
DFS๋ฅผ ํตํด ์์ด์ ๊ตฌํ๊ฒ ๋๋ฉด depth 0 ๋ถํฐ ์์ํด ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋์ํ๊ฒ ๋๋ค. ์์ด์ ๊ฐ ์์์ ์ค๋ณต์ ํ์ฉํ์ง ์๊ธฐ์, ํ๋์ ์์๋ฅผ ์ ํํ ๋ ์ค๋ณต์ผ๋ก ์ ํ๋์ง ์๋๋ก ์ฒดํฌํด์ฃผ์ด์ผ ํ๋ค. ์ฆ, DFS depth๋ ์ ํํ ์์์ ์๋ฅผ ์๋ฏธํ๊ฒ ๋๋ฉฐ, DFS ๋ด๋ถ์์ N๋งํผ์ ๋ฐ๋ณต์ ํตํด DFS๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฐ์ง๋ฅผ ๋ปฃ์ผ๋ฉฐ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์ ์ ์๋ค.
์ฝ๋
DFS๋ฅผ ์ฌ์ฉํ ๋ฌธ์ ํ์ด
from sys import stdin
def dfs(depth):
global answer
# ์ฌ๊ท ์ข
๋ฃ ์กฐ๊ฑด → ์ ํํ๊ณ ์ ํ๋ ์
if depth == m:
answer.append([*check])
else:
for i in range(n):
# ์ซ์๋ 1๋ถํฐ ์์ํ๋ฏ๋ก + 1
# ์ค๋ณต ์ ํ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฒดํฌํจ
if i + 1 in check:
continue
# ์ค๋ณต ์ฒดํฌ ๋ฐฉ์ง
check[depth] = i + 1
dfs(depth + 1)
# ํธ์ถ ํ ๋ค์ ํด์
check[depth] = 0
if __name__ == '__main__':
answer = []
n, m = map(int, stdin.readline().split())
check = [0] * m
dfs(0)
for num in answer:
print(*num)
itertools permutation์ ํ์ฉํ ํ์ด
from itertools import permutations
N, M = map(int, input().split())
nums = [num + 1 for num in range(N)]
for cases in permutations(nums, M):
for case in cases:
print(case, end=' ')
print()
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 15651 N๊ณผ M (3) (0) | 2020.07.14 |
---|---|
๋ฐฑ์ค: 15650 N๊ณผ M (2) (0) | 2020.07.14 |
๋ฐฑ์ค: 3085 ์ฌํ ๊ฒ์ (0) | 2020.07.13 |
๋ฐฑ์ค: 6064 ์นด์ ๋ฌ๋ ฅ (2) | 2020.07.12 |
๋ฐฑ์ค: 1476 ๋ ์ง ๊ณ์ฐ (0) | 2020.07.11 |