꽤나 곤란했던 문제다.
2번 예시 처럼
9 7 9 1이 주어졌을 때, 9가 두개라서 9 9가 나타나지만 1 9 는 한번만 나타나야 한다.
따라서 overlap
이라는 변수를 통해서 해당 depth
에서 그 수를 사용했는지 안했는지를 구분했다.
어차피 정렬이 되어있기 때문에, 같은 수가 중복 사용되는 경우는 다 걸러 낼 수 있다.
N, M = map(int, input().split())
numbers = list(map(int, input().split()))
numbers.sort()
visited = [0] * N
element = []
def dfs(depth):
if depth == M:
print(*element)
return
overlap = 0
for i in range(depth, N):
if not element:
if numbers[i] != overlap:
element.append(numbers[i])
visited[i] = 1
overlap = numbers[i]
dfs(depth+1)
element.pop()
visited[i] = 0
else:
if numbers[i] >= element[-1] and visited[i] == 0 and numbers[i] != overlap:
element.append(numbers[i])
visited[i] = 1
overlap = numbers[i]
dfs(depth+1)
element.pop()
visited[i] = 0
dfs(0)
'PS' 카테고리의 다른 글
[BOJ] 1309번 동물원 문제 - Python (0) | 2021.03.08 |
---|---|
[BOJ] 15666번 N과 M (12) 문제 - Python (0) | 2021.03.04 |
[BOJ] 15665번 N과 M (11) 문제 (0) | 2021.03.03 |
[BOJ] 2153번 소수 단어 문제 (0) | 2021.01.19 |
BOJ - 2133번 타일 채우기 (0) | 2020.09.08 |