본문 바로가기

코딩/Python

[Python] 백준 6603 로또

반응형

6603번: 로또 (acmicpc.net)

 

6603번: 로또

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

www.acmicpc.net

 

코드 작성

def dfs(lott, num):
    if lott == 6:
        print(*ans)
        return

    for i in range(num, k):
        ans.append(s[i])
        dfs(lott + 1, i + 1)
        ans.pop()


while True:
    arr = list(map(int, input().split()))
    k = arr[0]
    s = arr[1:]
    ans = []
    dfs(0, 0)
    print()
    if k == 0:
        exit()

코드  풀이

#1. dfs(lott, num)의 초깃값을 dfs(0,0)으로 세팅하고 for문을 돌린다.

 

만약 k가 7이라면

(1) s의 첫번째값을 ans에 넣고

(2) dfs(1,1) → lott 는 1

(3) s의 두번째 값을 ans에 넣고

(4) dfs(2,2) → lott 는 2

(5) s의 세번째 값을 ans에 넣고

(6) dfs(3,3) → lott 는 3

(7) s의 네번째 값을 ans에 넣고

(8) dfs(4,4) → lott 는 4

(9) s의 다섯번째 값을 ans에 넣고

(10) dfs(5,5) → lott 는 5

(11) s의 여섯번째 값을 ans에 넣고

(12) dfs(6,6) → lott 는 6

(13) ans 출력

(14) ans 여섯번째 값 pop

(15) dfs(6,7) → lott 는 6

(16) ans 출력

(17) ans 여섯번째 값 pop

(18) dfs(5,6) → dfs(5,7) → dfs(4,5) → dfs(4,6) → dfs(4,7) → dfs(3,4)

 

#2. 테스트 케이스 사이 빈줄 출력

#3. k가 0일경우 exit(프로그램 종료)

 

 

반응형