[๋ฐฑ์ค] 15652 N๊ณผ M (4) with Python
๐ BOJ 15652 N๊ณผ M (4)
๐ก ์กฐ๊ฑด
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.
๊ณ ๋ฅธ ์์ด์ ๋น๋ด๋ฆผ์ฐจ์์ด์ด์ผ ํ๋ค.
๊ธธ์ด๊ฐ K์ธ ์์ด A๊ฐ A1 โค A2 โค ... โค AK-1 โค AK๋ฅผ ๋ง์กฑํ๋ฉด, ๋น๋ด๋ฆผ์ฐจ์์ด๋ผ๊ณ ํ๋ค.์ฒซ์งธ ์ค์ ์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 โค M โค N โค 8)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค.
์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.๋ฐฑํธ๋ํน ์ ํ์ ๋ฌธ์
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์ 1
3 1
์คํ๊ฒฐ๊ณผ 1
1
2
3
์์ 2
4 2
์คํ๊ฒฐ๊ณผ 2
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4
์์ 3
3 3
์คํ๊ฒฐ๊ณผ 3
1 1 1
1 1 2
1 1 3
1 2 2
1 2 3
1 3 3
2 2 2
2 2 3
2 3 3
3 3 3
โจ๏ธ ๋ฌธ์ ํ์ด
N๊ณผ M (3)์ ๊ฒฐ๊ณผ์์ ์์ด์ด ์ค๋ฆ์ฐจ์์ธ ๊ฒ๋ง ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
์์ด์ ๋ง๋ค ๋, res ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๊ฐ ํ์ฌ ๋ฃ์ผ๋ ค๋ ์ซ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ ๋ฃ์ด์ฃผ๋ ์ฝ๋๋ฅผ ๋ฃ๋๋ค.
๐ฅ ์์ค ์ฝ๋
from sys import stdin, setrecursionlimit
setrecursionlimit(10 ** 7)
n, m = map(int, stdin.readline().split())
def f(arr, cnt):
if cnt == m:
print(*arr)
return
for i in range(1, n + 1):
if m > 1 and len(arr) > 0:
if arr[-1] <= i:
f(arr + [i], cnt + 1)
else:
f(arr + [i], cnt + 1)
f([], 0)