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
Carnegie Mellon University Robotics Institute | Research Associate | Developing For Our Lives, 세상에 기여하는 삶을 살고자 개발하고 있습니다

0개의 댓글

관련 채용 정보