본문으로 바로가기

백준 6603. 로또

집합 S와 S에 포함된 숫자의 갯수 k가 주어질 때

집합 S에 포함된 수 중에서 6개의 숫자를 고르는 모든 방법을 구하는 프로그램을 작성하시오.

백준에서 푼 문제 리스트 보러 가기

백준에서 문제 보기

github에서 코드 보기

주의할 사항

'출력 형식이 잘못되었습니다'  에러가 뜬 경우.

 : 각 테스트 케이스 사이에 빈 줄을 하나 출력하는 걸 잊었기 때문이다.

문제 풀이

이 문제는 파이썬의 순열과 조합을 구할 수 있는 itertools 라이브러리를 이해하고 있다면 쉽게 풀 수 있다. 

itertools를 활용하여 조합과 순열을 푸는 방법을 알고 싶다면 <Python으로 푸는 조합과 순열>을 참고하기를 바란다.

여기서는 combinations 메소드를 활용하여 경우의 수를 모두 구해 문제를 해결한다.

이미 주어진 입력에서 S의 원소들이 오름차순으로 주어져 있으므로, 

파이썬이 list원소들의 기존 순서를 유지하려는 특성을 활용한다면 특별한 조작을 하지 않더라도 문제에서 원하는 출력 방식인

사전 순으로 결과 값을 출력할 수 있다.

파이썬 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
from itertools import combinations
input = sys.stdin.readline
 
flag = True
 
while flag:
    line = list(map(int, input().strip().split()))
    n = int(line[0])
    if n == 0:
        flag = False
        break
 
    for case in combinations(line[1:], 6):
        print(' '.join(map(str, case)))
    print('')
 
cs

#파이썬 백준 6603 로또 #python 6603 로또