๋ฌธ์
https://www.acmicpc.net/problem/15655
๋ฐฑ์ค ๋ฌธ์ ์ง - 0x0C๊ฐ - ๋ฐฑํธ๋ํน
์๊ณ ๋ฆฌ์ฆ: ๋ฐฑํธ๋ํน
ํ์ด
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
- ๊ณ ๋ฅธ ์์ด์ ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ค.
๋ฐ๋ก ์ง์ ์ ๋ฌธ์ 15645: N๊ณผ M (5)๊ณผ ๋น์ทํ ๋ฌธ์ ๋ค.
ํ์ง๋ง ์ด๋ฒ์ ๋ง๋ค์ด์ง ์์ด ์์ฒด๊ฐ ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ฏ๋ก, ํ์ฌ ์ซ์๋ณด๋ค ์์ ์ซ์๋ค์ ์์ด์ ์ถ๊ฐ๋ ์ ์๋ค.
๋ฐ๋ผ์ ํ์ฌ ์ซ์์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ผ ๋ณ์ start๋ฅผ ํจ์์ ๊ฐ์ด ๋๊ฒจ์ค๋ค.
for๋ฌธ์ผ๋ก start๋ถํฐ N๊น์ง ์ํ๋ฅผ ์งํํ๋๋ฐ,
ํ์ฌ ์ซ์์ ๋ค๋ก ๋ค์ ์ธ๋ฑ์ค๋ถํฐ ์์ด์ ์ถ๊ฐ๋ ์ ์์ผ๋ฏ๋ก backtrack(ํ์ฌ ์ซ์์ ์ธ๋ฑ์ค+1, ์์ด)์ ํํ๋ก ํธ์ถํ๋ค.
์ ์ฒด ์ฝ๋
# ๋ฉ๋ชจ๋ฆฌ: 31120KB / ์๊ฐ: 32ms
from sys import stdin
input = stdin.readline
N, M = map(int, input().split())
nums = sorted(map(int, input().split()))
def backtrack(start, ret):
if len(ret) == M:
print(" ".join(map(str, ret)))
return
for i in range(start, N):
ret.append(nums[i])
backtrack(i+1, ret)
ret.pop()
backtrack(0, [])