happy318
팽도리블로그
happy318
전체 방문자
오늘
어제
  • 전체글 (252)
    • 공부 (5)
      • Algorithm 정리 (0)
      • 논문리뷰 (1)
      • C++ (2)
      • Python (2)
      • Java (0)
      • Back-end (0)
      • Front-end (0)
      • Embedded (0)
    • 코딩테스트 (218)
      • Python 문제풀이 (100)
      • C++ 문제풀이 (108)
      • Python template (9)
      • C++ template (1)
    • 일상 (20)
      • 맛집 (13)
      • 쇼핑 (5)
      • 아무 일상 (2)
    • 게임 (9)
      • 메이플스토리 (9)

최근 글

인기 글

hELLO · Designed By 정상우.
happy318

팽도리블로그

코딩테스트/Python 문제풀이

[백준] N과 M (2)

2022. 6. 25. 20:49

https://www.acmicpc.net/problem/15650

 

15650번: N과 M (2)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

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
    '코딩테스트/Python 문제풀이' 카테고리의 다른 글
    • [백준] 공통 부분 문자열
    • [백준] 문자열 폭발
    • [백준] 2048 (Easy)
    • [백준] 웜홀
    happy318
    happy318

    티스토리툴바