ํฐ์คํ ๋ฆฌ ๋ทฐ
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์ ๋์ผํ๋ค.
๋ฌธ์
๋ฌธ์ ํ์ด
์ด์ ์ ๋ค๋ฃฌ ๋ฌธ์ ์ธ 15649 N๊ณผ M (1)๋ N๊ฐ์ ์ซ์ ์ค์ M๊ฐ์ ๊ธธ์ด์ ์์ด์ ๊ตฌํ๋ ๋ฌธ์ ์๋ค. ์ด์ ๋ฌ๋ฆฌ N๊ณผ M (2)๋ N๊ฐ์ ์ซ์ ์ค์ M๊ฐ์ ์กฐํฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ์์ด์ (1, 2) (2, 1)์ ๋ชจ๋ ๊ตฌํ์ง๋ง ์กฐํฉ์ ์ด๋ฅผ ๊ตฌํ์ง ์๋๋ค. ์ฆ ์กฐํฉ์ ์์์ ์๊ด์์ด ์์๊ฐ ๊ฐ์ผ๋ฉด ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ก ์๊ฐํ๋ค. ์ด๋ฅผ ์กฐํฉ์ ์์๋ฅผ ๊ณ ๋ คํ์ง ์๋๋ค๋ผ๊ณ ํํํ๊ธฐ๋ ํ๋ค. 15649 N๊ณผ M (1)์์ DFS๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ ์ดํดํ์๋ค๋ฉด, ํ ๊ฐ์ง ์กฐ๊ฑด๋ง ์ถ๊ฐํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค.
๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฐ ์์์ ๋ฐ๋ผ ์ ํํ ์ ์๋ ์๋ ์์ ๊ฐ๋ค. ์ฆ 1 ์ดํ์ ๋ค์ ์์๋ถํฐ ์ ํํ ์ ์๋ ๊ฒ์ ์๊ธฐ ์์ ์ ์ ์ธํ ๋ค์๋ถํฐ๋ผ๋ ๊ฒ์ ์ ์ ์๋ค. ์ด๋ฅผ ์ํ ์กฐ๊ฑด์ผ๋ก DFS์ ํธ์ถ ์กฐ๊ฑด์ ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ฉด ์ฝ๊ฒ ํด๊ฒฐ ํ ์ ์๋ค.
์ฝ๋
DFS๋ฅผ ์ฌ์ฉํ ๋ฌธ์ ํ์ด
from sys import stdin
# ์์ด๊ณผ ๋ฌ๋ฆฌ ํ์ฌ ์ธ๋ฑ์ค์ ๊ฐ์ด ํ์ํจ.
def dfs(idx, depth):
global answer
# ์ฌ๊ท ์ข
๋ฃ ์กฐ๊ฑด → ์ ํํ๊ณ ์ ํ๋ ์
if depth == m:
answer.append([*check])
else:
for i in range(idx, n):
check[depth] = i + 1
dfs(i + 1, depth + 1)
if __name__ == '__main__':
answer = []
n, m = map(int, stdin.readline().split())
check = [0] * m
dfs(0, 0)
for num in answer:
print(*num)
itertools combinations๋ฅผ ํ์ฉํ ํ์ด
from itertools import combinations
N, M = map(int, input().split())
nums = [num + 1 for num in range(N)]
for cases in combinations(nums, M):
for case in cases:
print(case, end=' ')
print()
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 15652 N๊ณผ M (4) (0) | 2020.07.14 |
---|---|
๋ฐฑ์ค: 15651 N๊ณผ M (3) (0) | 2020.07.14 |
๋ฐฑ์ค: 15649 N๊ณผ M (1) (0) | 2020.07.14 |
๋ฐฑ์ค: 3085 ์ฌํ ๊ฒ์ (0) | 2020.07.13 |
๋ฐฑ์ค: 6064 ์นด์ ๋ฌ๋ ฅ (2) | 2020.07.12 |