[python] 6603_로또

yeco_ob·2023년 2월 6일
0

알고리즘 문제 풀이

목록 보기
15/24

문제

독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다. 예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ..., [3,5,8,13,21,34]) 집합 S와 k가 주어졌을 때, 수를 고르는 모든 방법을 구하는 프로그램을 작성하시오.

해결 방법

파이썬에서 조합을 구하는 방법 중 기본 라이브러리인 itertools를 사용했다.
파이썬 공식 문서

💡조합형 이터레이터

두개 이상의 리스트에서의 조합

✨product(p, q)

하나의 리스트에서 r길이의 조합

✨permutations(p, r)
순열: (A,B)와 (A,B)는 다르다. 모든 가능한 순서로 반복 요소 없는 결과.

✨combinations(p, r)
조합: (A,B)와 (A,B)는 같다. 정렬된 순서로 반복 요소 없는 결과.

제출

from itertools import combinations
import sys 
input = sys.stdin.readline

while True:
    num_list = list(map(int,input().split()))
    k = num_list[0] #num_list이 첫 요소는 k
    s = num_list[1:] #num_list에서 첫 요소 빼고 s에 저장

    if k == 0: #가 0이면 조합X
        break
    else:
        a_list = list(combinations(s,6))
        for i in a_list:
            for j in range(len(i)):
                print(i[j], end=' ')
            print() #줄 바꿈
        print() #줄 바꿈

0개의 댓글