[Algorithm] 백준 6603 로또 python

Junho Bae·2021년 1월 13일
0

Algotrithm

목록 보기
5/13

백준 6603 로또 원문

문제

독일 로또 문제. 로또 맞았으면 좋겠다. 독일 로또는 1,2,....49에서 수 6개를 고른단다. 근데 그 전략이, {1,2,....49}중의 수 중에서 6 이상의 수 k개를 골라 집합 s를 만들고, 그 수만으로 번호를 선택한다는 것이다.

즉, k=8인 경우 1~49 중에서 8개의 숫자를 골라 S를 만든다. S = {1,2,3,5,8,13,21,34}인 경우, 여기서 로또 번호인 6개를 고르는 경우의 수는 총 28가지라고 한다.

결국에는 집합 S랑 K가 주어졌을 때, 만들 수 있는 수를 고르는 모든 방법을 구하는거다. 결국 문제는 간단한데 앞에 설명 읽으니까 헷갈리는건 나만그럼?

어떻게 풀었지?

ㄱ..그냥 입력값 받고 출력할 수 있는 경우의 수 combinations 쓰면 뚝딱. 순서가 상관 없기 때문이다. 파이썬의 좋은점..

어디서 헤맸지?

easy~
사실 포스팅 할 때 코드 잘 안고치는데(...) 굳이 입력받은 리스트에서 deepcopy를 하길래 왜저랬지..하면서 고쳤다. 약간 문법 연습이랄까. 사실 원래 sys도 거의 안쓰고 map도 잘 안쓰고 join도 잘 안썼는데 쓰는 연습.

from itertools import combinations
import sys
from copy import deepcopy

def solve() :

    while True :
        a = list(map(int,sys.stdin.readline().split(" ")))
        k = a[0]
        S = a[1:]

        if k == 0 : return

        ans = list(combinations(S,6))

        for c in ans :
            print(" ".join(map(str,c)))
        
        print()

if __name__ == "__main__" :
    solve()
            
profile
SKKU Humanities & Computer Science

0개의 댓글