Algorithm/BOJ
[BOJ][python] 15666. N과 M (12)
so-so
2022. 7. 2. 17:03
반응형
https://www.acmicpc.net/problem/15666
15666번: N과 M (12)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
💡IDEA
백트래킹을 사용하는 문제이다.
백준에 N과 M 문제가 많은데, 12번 쯤 되면 순열을 조건별로 구할 수 있는 달인이 되었을 것이다.
15657. N과 M (8) 과 15663. N과 M (9) 두 문제를 적절하게 섞어서 풀 수 있는 문제다.
같은 수를 여러 번 골라도 되고, 비내림차순인 수열을 구한다.
같은 수 중복 허용이므로 반복문의 시작점은 idx 부터이고, tmp를 통해 중복되는 수열은 없도록 한다.
📌CODE
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
numbers = sorted(list(map(int, input().split())))
def permutation(idx, perm):
if len(perm) == M:
print(*perm)
return
tmp = 0
for i in range(idx, N):
if tmp != numbers[i]:
perm.append(numbers[i])
tmp = numbers[i]
permutation(i, perm)
perm.pop()
permutation(0, [])
반응형