2309 : 일곱 난쟁이

서희찬·2021년 10월 29일
0

백준

목록 보기
68/105

문제

코드


import sys
input=sys.stdin.readline

visited = [0 for _ in range(9)]
arr =[0]*9
arr2=[] #찐 난쟁이


def dfs(cnt,idx):
    if cnt== 7: #길이가 7
        total=0
        for i in range(7):
            total+=arr2[i]
        if total==100:
            arr2.sort()
            for i in range(7):
                print(arr2[i])
        return

    for i in range(idx,9):
        if visited[i]==0:
            arr2.append(arr[i])
            visited[i]=1 #방문 
            dfs(cnt+1,i+1)
            visited[i]=0
            del arr2[-1] #마지막부분지우기 

for i in range(9):
    arr[i]=int(input())
dfs(0,0)

해설

백트래킹을 활용한 방법이라고 생각하면 된다.
dfs를 통해서 제일 깊은 곳까지 가는것을 if cnt == 7 이라는 것을 통해서 확인하여 만약 이것이 내가 구하는 값이라면 출력하고 아니라면 리턴하여 탈출하는 과정이다.
이렇게 쭉쭉 처음부터 끝까지 조합을 하는 과정이라고 보면 된다.

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글