백준(Python) 풀이/브루트포스 알고리즘

백준(Python) 2309번 일곱 난쟁이 풀이

개발윗미 2022. 11. 5. 17:39

Python으로 구현한 2309번 일곱 난쟁이 문제 풀이입니다.

 

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net


def combinations(arr, r) :
    for i in range(len(arr)) :
        if r == 1 :
            yield [arr[i]]
        else :
            for next in combinations(arr[i+1:], r-1) :
                yield [arr[i]] + next

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

result = []
for value in combinations(data, 7) :
    if sum(value) == 100 :
        result = sorted(value)
        break

for res in result :
    print(res)

 

1. 입력된 9개의 값들을 data 리스트에 정의하고, 조합(combinations)을 통해 data 리스트에서 7개의 수를 도출해낸다.

 

2. 만약 도출해낸 7개의 수의 합이 100일 경우 오름차순으로 정렬하여 result에 할당하고 break 한다.

 

3. 최종적으로 result 리스트에 존재하는 값들을 하나씩 출력한다.