동까의 코딩

[Python] 백준 2309 : 일곱 난쟁이 본문

문제 풀이/백준

[Python] 백준 2309 : 일곱 난쟁이

동까의 코딩 2024. 4. 9. 21:59
반응형

 

 

https://www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

브루드 포스 기본문제인 일곱 난쟁이를 풀어보았다.

이 문제를 풀어보면서 브루드포스에 대한 내용도 인지하였고, dfs를 사용하여 풀이했다.

 

short_men = [int(input()) for _ in range(9)]
search_short_men = []

def dfs(depth, start):
    if depth == 7:
        if sum(search_short_men) == 100:
            for j in sorted(search_short_men):
                print(j)
            exit()
        else:
            return
    
    for i in range(start, len(short_men)):
        search_short_men.append(short_men[i])
        dfs(depth+1, i + 1)
        search_short_men.pop()

dfs(0, 0)

 

 

 

다른 풀이로는 combinations를 이용하여 풀이하였다.

import itertools

short_men = [int(input()) for _ in range(9)]
search_short_men = []

for i in itertools.combinations(short_men, 7):
    if sum(i) == 100:
        for j in sorted(i):
            print(j)
        break
반응형

'문제 풀이 > 백준' 카테고리의 다른 글

[Python] 백준 8958 : OX퀴즈  (0) 2024.04.09
[Python] 백준 2309 : 일곱 난쟁이  (0) 2024.04.09
[Python] 백준 14503 : 로봇 청소기  (1) 2024.04.04
[Python] 백준 2161 : 카드1  (0) 2024.04.03
[Python] 백준 17608 : 막대기  (0) 2024.04.03