STUDY/Algorithm

[백준] 6603 로또

sinawi95 2021. 3. 4. 21:43
728x90

www.acmicpc.net/problem/6603

 

6603번: 로또

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

www.acmicpc.net

로또 1등 한번만 받아보고싶습니다.....

while True:
    k, *S = map(int, input().split())
    if k == 0: break
    visited = [0] * k


    def lotto(index=0, arr=[]):
        if index == 6:
            print(*arr)
            return
        else:
            for i in range(index, k):
                if visited[i] == 0:
                    if arr and arr[-1] > S[i]: continue
                    visited[i] = 1
                    lotto(index + 1, arr + [S[i]])
                    visited[i] = 0
    lotto()
    print()

백트래킹을 사용하여 모든 조합을 구하는 것처럼 만들었고, 그 안에서도 오름차순인 것만 뽑아내었다.

백트래킹중에서 조합구하는건 그래도 할만한데 다른것들이 너무 힘들다....

머리에 쥐날것같지만 손에 익을때 까지 문제를 계속 풀어야겠다

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 1759 암호만들기  (0) 2021.03.05
[백준] 3980 선발명단  (1) 2021.03.05
[백준] 2583 영역구하기  (0) 2021.03.04
[백준] N과 M (시리즈)  (0) 2021.03.04
[백준] 2798 블랙잭  (0) 2021.03.04