왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.
아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.
아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
일곱 난쟁이의 키를 오름차순으로 출력한다. 일곱 난쟁이를 찾을 수 없는 경우는 없다.

입력값이 9번으로 정해져있고 그 중 7개로 합이 100인것을 구하는 것이기 때문에,
모든 경우의 수를 구하는 브루트포스를 이용하기에 충분하다고 생각했다.
import sys
from itertools import combinations
빠른 입력을 위해 sys를, 조합을 구하기 위해 itertools 라이브러리의 combinations를 사용했다
arr = []
for _ in range(9):
arr.append(int(sys.stdin.readline().strip()))
빈 배열을 하나 준비해, 9개의 값을 입력받아 넣어줬다
combination = combinations(arr, 7)
combinations를 이용해 arr에 들어있는 9개의 값 중 7개를 이용하여 만들 수 있는 중복되지 않는 모든 경우를 combination 변수에 넣어줬다 (tuple)
for k in combination:
if sum(k) == 100:
k_list = list(map(int, k))
k_list.sort()
for i in k_list:
print(i)
break
combination 안의 조합들을 하나씩 꺼내 sum으로 더해 합이 100인지를 확인
100이라면 k_list 변수 안에 튜플을 list 형식으로 변환하고 저장 (튜플에선 sort를 사용할 수 없기 때문)
for 문을 이용해 변환한 list 값을 하나씩 출력하고, break로 반복문을 빠져나간다
import sys
from itertools import combinations
arr = []
for _ in range(9):
arr.append(int(sys.stdin.readline().strip()))
combination = combinations(arr, 7)
for k in combination:
if sum(k) == 100:
k_list = list(map(int, k))
k_list.sort()
for i in k_list:
print(i)
break