[백준] 6603 로또 - 백트랙킹

jckim22·2023년 8월 2일
0

[ALGORITHM] STUDY (PS)

목록 보기
68/86

난이도

Silver 2

풀이 참고 유무

x

막힌 부분

x

문제

문제 바로가기
독일 로또는 {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가 주어졌을 때, 수를 고르는 모든 방법을 구하는 프로그램을 작성하시오.

입력

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

출력

각 테스트 케이스마다 수를 고르는 모든 방법을 출력한다. 이때, 사전 순으로 출력한다.
각 테스트 케이스 사이에는 빈 줄을 하나 출력한다.

예제 입력

7 1 2 3 4 5 6 7
8 1 2 3 5 8 13 21 34
0

예제 출력

1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7

1 2 3 5 8 13
1 2 3 5 8 21
1 2 3 5 8 34
1 2 3 5 13 21
1 2 3 5 13 34
1 2 3 5 21 34
1 2 3 8 13 21
1 2 3 8 13 34
1 2 3 8 21 34
1 2 3 13 21 34
1 2 5 8 13 21
1 2 5 8 13 34
1 2 5 8 21 34
1 2 5 13 21 34
1 2 8 13 21 34
1 3 5 8 13 21
1 3 5 8 13 34
1 3 5 8 21 34
1 3 5 13 21 34
1 3 8 13 21 34
1 5 8 13 21 34
2 3 5 8 13 21
2 3 5 8 13 34
2 3 5 8 21 34
2 3 5 13 21 34
2 3 8 13 21 34
2 5 8 13 21 34
3 5 8 13 21 34

문제 검토

전에 계속 사용했던 방법인 이전 인덱스를 기록하는 방법으로 쉽게 풀 수 있을 것 같다.

풀이(python)

Python

from sys import stdin
input=stdin.readline
result=[]
def dfs(depth,beforeidx):
    if depth==6:
        print(' '.join(map(str,result)))
        return
    for x in range(1,len(num)):
        if not num[x][1] and beforeidx<=num[x][2]:
            num[x][1]=True
            result.append(num[x][0])
            dfs(depth+1,num[x][2])
            num[x][1]=False
            result.pop()
            
while(True):
    num=list(map(int,input().split()))    
    k=num[0]
    if k==0:
        break
    for x in range(1,len(num)):
        num[x]=[num[x],False,x]
    dfs(0,1)
    print()       

아이디어:

#모든 경우의 수를 구하되 이전 인덱스보다 클 때만 통과시킨다.

걸린 시간

16:56

총평

지금까지 풀었던 백트랙킹 문제에 비해 매우 쉬운 편이다.
N과 M(5)와 비슷한 문제이다.

profile
개발/보안

0개의 댓글