본문 바로가기
IT/알고리즘

백준 - 6603번

by Sungjun_ 2020. 11. 19.

문제

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

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net

 


코드

import sys

def set(start, index):
    if index == 6:
        for i in range(6):
            print(f'{temp[i]}', end=' ')
        print()
    for i in range(start, len(lst)):
        temp[index] = lst[i]
        set(i+1, index+1)


temp = [0] * 13
while True:
    lst = list(map(int, sys.stdin.readline().rstrip().split()))
    if lst[0] == 0:
        break
    del lst[0]
    set(0, 0)
    print()

 

집합 최대 개수가 12개이기 때문에 temp의 최대 길이를 13으로 해줍니다.

 

그리고 while 반복문을 돌려서 0이 입력됐을 때만 종료하게 만들어줍니다.

그렇지 않은 경우에는 lst[0]이 필요 없기 때문에 삭제해주고 set함수를 호출합니다.

마지막으로 각 테스트 케이스 사이에 빈 줄을 출력하기 때문에 print()를 해줍니다.

 

set함수에서 

    for i in range(start, len(lst)):
        temp[index] = lst[i]
        set(i+1, index+1)

 

이 부분을 직접 해보시는게 좋을 것 같습니다.

 

 

'IT > 알고리즘' 카테고리의 다른 글

알고리즘 - 단순 삽입 정렬  (0) 2020.11.23
알고리즘 - 버블 정렬  (0) 2020.11.20
알고리즘 - 재귀 알고리즘(3)  (1) 2020.11.19
백준 - 17478번  (0) 2020.11.18
백준 - 1914번  (0) 2020.11.18

댓글