[BaekJoon] ๋ฐฑ์ค 15663๋ฒ : N๊ณผ M (9)
Updated:
15663๋ฒ : N๊ณผ M (9)
๋ค๋ฅธ N๊ณผ M ๋ฌธ์ ์ ๋นํด ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ ์ด๋ ค์ ๋ ๋ฌธ์ ์๋ค..
๋ด๊ฐ ์๊ฐํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฃผ์ด์ง ์์ฐ์ ์ค ์ค๋ณต ๊ฐ์ ์ฐพ์ ๋ฐ๋ก ์ ์ฅ์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฃผ์ด์ง ์์ฐ์ ๋ฐฐ์ด์ set ์ผ๋ก ๋ฐ๊พธ์ด ์ค๋ณต ๊ฐ์ ์์ ๊ณ ์ด set ์ผ๋ก ์์ด์ ๋ง๋ ๋ค.
4 3
2 4 4 9 ์ด๋ ๊ฒ ๋ฐฐ์ด์ด ์ฃผ์ด์ง ๊ฒฝ์ฐ ์ค๋ณต ๊ฐ 4 ๋ฅผ ๋ฐ๋ก ์ ์ฅํ ๋ค 2 4 9 ๋ฐฐ์ด๋ก ๋ง๋ค๊ณ ์์ด์ ๋ง๋๋ ๊ฒ ์ด๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ์ด๋ฐ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋๋ฐ ๋ ธ๋์ ํ๊ด์น ์ด ๋ ๊ฒฝ์ฐ๊ฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ด๋ค.
๋ต์ด ์๋ ๊ฒฝ์ฐ๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ฒซ ๋ฒ์งธ๋ก 2 2 ๊ฐ์ด ์ค๋ณต ๊ฐ์ด ์๋๋ฐ ๋ append ๋ฅผ ํ๋ ๊ฒฝ์ฐ ๋ฐ๋ก continue ๋ฅผ ํ๋ค.
๋ ๋ฒ์งธ๋ก 4 4 4 ๊ฐ์ด 4 4 ๋ ๊ฐ๋ฅํ์ง๋ง ๋ 4 ๊ฐ ๋ค์ด์ค๋ฉด ์๋๋ ๊ฒฝ์ฐ์ด๋ค.
์ด ๊ฒฝ์ฐ๋ฅผ Counter ๋ฅผ ์ด์ฉ ํด ์ฐพ์์ฃผ์๋ค.
์ฒ์ ์ฃผ์ด์ง ์ค๋ณต ๊ฐ์ ๊ฐ์๋ณด๋ค ์คํ์ ์๋ ์ค๋ณต ๊ฐ์ ๊ฐ์๊ฐ ๋ ๋ง์์ง๋ฉด ๋ฐ๋ก continue ๋ฅผ ํ๋ค.
์๋ฅผ๋ค์ด ์ฒ์ ์ฃผ์ด์ง ๋ฐฐ์ด์์ ์ค๋ณต ๊ฐ 4 ๋ ๋ ๊ฐ์๋๋ฐ ์คํ์ด 4 4 ์ธ ๊ฒฝ์ฐ 4 ๋ฅผ ๋ ๋ฃ์ด์ฃผ๋ฉด ์ค๋ณต ๊ฐ์ ๊ฐ์๊ฐ ์ธ ๊ฐ๊ฐ ๋๋ค.
์ด๋ ๊ฒ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์ ์ธ์์ผ์ฃผ๋ฉด ๋ต์ ๊ตฌํ ์ ์๋ค.
๋ฌผ๋ก Permutation ๊ณผ set ์ ์ด์ฉํ๋ฉด ์ฝ๋ ํ ์ค๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค..
import sys
from collections import Counter
def DFS():
if len(stack) == m:
print(*stack)
return
for i in range(len(data)):
if stack and data[i] in stack and data[i] not in duplicate:
continue
if data[i] in duplicate and count[data[i]] < Counter(stack)[data[i]] + 1:
continue
stack.append(data[i])
DFS()
stack.pop()
n, m = map(int, sys.stdin.readline().rsplit())
data = list(map(int, sys.stdin.readline().rsplit()))
count = Counter(data)
stack = []
duplicate = []
for key, value in zip(count.keys(), count.values()):
if value > 1:
duplicate.append(key)
data = sorted(list(set(data)))
DFS()
import sys
from itertools import permutations
n, m = map(int, sys.stdin.readline().rsplit())
data = map(int, sys.stdin.readline().rsplit())
for val in sorted(list(set(permutations(data, m)))):
print(*val)
Leave a comment