ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
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 (1 - 8)์ ๋ฌธ์ ๋ค์ ์์๊ฐ ์ค๋ณต๋์ง๋ ์์๋ค. ํ์ง๋ง 9 - 12๋ฒ ๋ฌธ์ ๋ ์์๊ฐ ์ค๋ณต๋๋ฉฐ ๊ฐ ์๊ฑด์ ๋ง๊ฒ ์์ด, ์กฐํฉ์ ๊ตฌํ์ฌ์ผ ํ๋ค. ํด๋น ๋ฌธ์ ๋ ์ค๋ณต๋๋ ์์๊ฐ ์์ ๋, ์์ด์ ๊ตฌํ๋ ๋ฌธ์ ๋ก set์ ํ์ฉํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
์ฝ๋
DFS๋ฅผ ํ์ฉํ ๋ฌธ์ ํ์ด
from sys import stdin
def dfs(depth):
global answer
if depth == m:
answer.add(tuple(nums[i] for i in check))
return
else:
for i in range(n):
if i in check:
continue
check[depth] = i
dfs(depth + 1)
check[depth] = -1
if __name__ == "__main__":
# ์ค๋ณต๋ ์์ด์ ์ถ๊ฐํ์ง ์๋๋ก set์ผ๋ก ์ ์ธ
answer = set()
n, m = map(int, stdin.readline().split())
nums = sorted(list(map(int, stdin.readline().split())))
# index ๊ฐ์ ์ ์ฅํ๋ฏ๋ก -1๋ก ์ด๊ธฐํ
check = [-1] * m
dfs(0)
for num in sorted(list(answer)):
print(*num)
์์ ํผ ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด, ์ฐพ์ ์์ด์ ์ ์ฅํ๋ answer๋ฅผ set์ผ๋ก ์ ์ธํ์ฌ, ์ค๋ณต๋ ๊ฐ์ ๋ด์ง ์์๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ์ค๋ณต๋ ๊ฐ์ (1, 7) (7, 1)๊ณผ ๊ฐ์ ๊ฐ์ด ์๋, (1, 7), (1, 7)์ ์๋ฏธํ๋ ๊ฒ์ด๋ค.
itertools permutations๋ฅผ ํ์ฉํ ํ์ด
from itertools import permutations
N, M = map(int, input().split())
nums = map(int, input().split())
for cases in sorted(list(set(permutations(nums, M)))):
for case in cases:
print(case, end=' ')
print()
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 10973 ์ด์ ์์ด (0) | 2020.07.15 |
---|---|
๋ฐฑ์ค: 10972 ๋ค์ ์์ด (0) | 2020.07.15 |
๋ฐฑ์ค: 15652 N๊ณผ M (4) (0) | 2020.07.14 |
๋ฐฑ์ค: 15651 N๊ณผ M (3) (0) | 2020.07.14 |
๋ฐฑ์ค: 15650 N๊ณผ M (2) (0) | 2020.07.14 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ