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