[๋ฐฑ์ค] 15651 N๊ณผ M (3) with Python
๐ BOJ 15651 N๊ณผ M (3)
๐ก ์กฐ๊ฑด
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
๊ฐ์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ณจ๋ผ๋ ๋๋ค.์ฒซ์งธ ์ค์ ์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 โค M โค N โค 7)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค.
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค.
์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.๋ฐฑํธ๋ํน ์ ํ์ ๋ฌธ์
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์ 1
3 1
์คํ๊ฒฐ๊ณผ 1
1
2
3
์์ 2
4 2
์คํ๊ฒฐ๊ณผ 2
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
4 1
4 2
4 3
4 4
์์ 3
3 3
์คํ๊ฒฐ๊ณผ 3
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
2 3 1
2 3 2
2 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3
โจ๏ธ ๋ฌธ์ ํ์ด
์ฌ๊ทํจ์๋ฅผ ํตํด์ ๋ฐฑํธ๋ํน์ ํ๋ค.
ํจ์ f์์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋์ ๊ฐ์ด ๋ฐ๋๋ค.
- arr : ๋ฐฑํธ๋ํน์ ์ํํ๋ฉด์ f ํจ์๋ฅผ ์ฌ๊ทํ๋ฉฐ ์์ฐ์๋ฅผ ๋ด์ ๋ฐฐ์ด
- cnt : arr์ ๋ด๊ธด ์์ ๊ฐ์
cnt ์ m ์ด ๊ฐ์์ง๋ฉด ๊ฒฐ๊ณผ๊ฐ์ ๋ด์ ๋ฐฐ์ด์ ์ถ๋ ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ํจ์๋ฅผ ํ์ถ.
(3)๋ฒ์ ์กฐ๊ฑด์ด ๋ง์ง ์์ผ๋ฉด 1๋ถํฐ n ๊น์ง ์ํํ๋ฉด์ ์ฌ๊ท ๋ฐ ๋ฐฑํธ๋ํน์ ์งํํ๋ค.
๐ฅ ์์ค ์ฝ๋
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):
f(arr + [i], cnt + 1)
f([], 0)