문제
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- N개의 자연수 중에서 M개를 고른 수열
- 고른 수열은 비내림차순이어야 한다.
- 길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.
입력
첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.
출력
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.
예제 입력 1
3 1
4 4 2
예제 출력 1
2
4
예제 입력 2
4 2
9 7 9 1
예제 출력 2
1 7
1 9
7 9
9 9
예제 입력 3
4 4
1 1 2 2
예제 출력 3
1 1 2 2
풀이
itertools의 combinations을 사용하여 숫자들을 조합하였다.
m이 1일 경우와 그렇지 않은 경우로 case를 분리하였다.
m이 1일 경우에는 따로 combination을 하지않고 중복을 제거하여 오름차순으로 출력해준다.
그렇지 않은 경우는
조합을 만들고 마찬가지 중복을 제거하고 오름차순으로 출력해준다.
from itertools import combinations
n, m = map(int, input().split())
num_list = sorted(list(map(int, input().split())))
if m == 1:
for i in sorted(list(set(num_list))):
print(i)
else:
combi_list = list(combinations(num_list, m))
for i in sorted(list(set(combi_list))):
print(*i)
반응형
'Algorithm > Online judge' 카테고리의 다른 글
[백준] 2644번 > 촌수계산 (0) | 2021.03.05 |
---|---|
[백준] 15663번 > N과 M (9) (0) | 2021.03.04 |
[백준] 14425번 > 문자열 집합 (0) | 2021.03.04 |
[백준] 1431번 > 시리얼 번호 (0) | 2021.03.04 |
[백준] 13241번 > 최소공배수 (0) | 2021.03.04 |