https://www.acmicpc.net/problem/15650
itertools 라이브러리의 combination을 이용해서 해결하는 문제입니다.
우선 문제부터 간단하게 요약하면, N과 M이 주어지면, 1~N의 숫자중 중복없이 M개를 고른 수열을 사전순으로 출력해야 하는 문제입니다.
<Solution>
itertools의 combination의 경우 combination을 어떻게 구성하는지 출력해보면
다음과 같이 사전순으로 출력하는 것을 알 수 있습니다. 따라서 sorted된 list를 이용하여 combination을 구해서 알맞은 format으로 출력만 하면 되는 문제인 것을 알 수 있습니다. 실제 구현은 아래와 같습니다.
import sys
import itertools
N, M = list(map(int, sys.stdin.readline().rstrip().split()))
tmp_list = [i for i in range(1,N+1)]
for e in itertools.combinations(tmp_list, M):
print(' '.join(list(map(str,list(e)))))
왜 사전순이 성립하는가에 대해서도 나중에 기회가 되면 공부해보고 포스팅 해 보겠습니다.
(cpython의 코드안의 itertools.pyi, itertoolsmodule.c, itertoolsmodule.h)의 코드를 읽어보면 될듯 합니다.)
반응형
'코딩테스트 > Python 문제풀이' 카테고리의 다른 글
[백준] 공통 부분 문자열 (0) | 2022.06.28 |
---|---|
[백준] 문자열 폭발 (0) | 2022.06.26 |
[백준] 2048 (Easy) (0) | 2022.06.25 |
[백준] 웜홀 (0) | 2022.06.25 |
[백준] 최단경로 (0) | 2022.06.24 |