For Programmer

백준 6603번 파이썬 문제풀이(브루트 포스 - 로또) 본문

코팅테스트/백준 문제 모음

백준 6603번 파이썬 문제풀이(브루트 포스 - 로또)

유지광이 2021. 10. 26. 13:35
728x90


코드1(라이브러리 이용)

import itertools

while True:

    array = list(map(int, input().split()))

    k = array[0]
    S = array[1:]

    for i in itertools.combinations(S, 6):
        print(*i)

    if k == 0:
        exit()
    print()

-> 따로설명은 생략하겠다. 조합 라이브러리를 사용하게 허용해놓아서 사실상 배열에 k값도 들어가있기 때문에 k값이랑 로또 번호하고 분리만 해주면 쉽게 풀수 있는 문제이다.


코드2(재귀 이용)

def dfs(depth, idx):
    if depth == 6:
        print(*out)
        return

    for i in range(idx, k):
        out.append(S[i])
        dfs(depth + 1, i + 1)
        out.pop()


while True:
    array = list(map(int, input().split()))
    k = array[0]
    S = array[1:]
    out = []
    dfs(0, 0)
    if k == 0:
        exit()
    print()

-> 사실 이문제는 재귀로 dfs를 이용해서 풀어야 되는 문제이다. 실제 시험에는 분명 라이브러리 사용을 막을 테니 dfs를 이용하면 되는데 이문제는 https://ji-gwang.tistory.com/257 와 거의 동일한 문제이니 위의 코드가 이해되지 않는다면 해당 글을 보기를 바란다.

728x90
Comments