반응형
15666번: N과 M (12) (acmicpc.net)
풀이
- 중복을 허용한 N개의 수를 입력받고 그 중에서 M개씩 고른 오름차순 중복조합을 사전순 증가로 출력하는 문제이다.
- 파이썬의 itertools 에서 combinations_with_replacement 을 import 하여 쉽게 중복조합을 구현 할 수 있다.
- 사전순 증가를 위해 입력받은 N개의 수를 sort 하고 중복조합을 만든다
- 이후 만들어진 중복조합들중 중복되는 것들을 제거하기 위해 set을 사용해 중복을 제거한다.
import sys
from itertools import combinations_with_replacement
n , m = map(int, sys.stdin.readline().split(" "))
stack = list(map(int , sys.stdin.readline().split(" ")))
stack.sort()
ans = list(combinations_with_replacement(stack, m))
ans = list(set(ans))
ans.sort()
if m == 1:
for t in range(0, len(ans)):
s = list(ans[t])
print(s[0])
else:
for t in range(0,len(ans)):
s = list(ans[t])
for u in range(0,len(s)-1):
print(s[u],end=" ")
print(s[len(s)-1])
반응형
'코딩 > 백준' 카테고리의 다른 글
알고리즘 - Python / 백준 - 1932번 : 정수 삼각형 (0) | 2021.09.21 |
---|---|
알고리즘 - Python / 백준 - 11053번 : 가장 긴 증가하는 부분 수열 (0) | 2021.09.20 |
알고리즘 - Python / 백준 - 15663번 : N과 M (9) (0) | 2021.09.20 |
알고리즘 - Python / 백준 - 9465번 : 스티커 (0) | 2021.09.20 |
알고리즘 - Python / 백준 - 2407번 : 조합 (0) | 2021.09.20 |