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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

9명 중 7명을 골라서 그 7명의 키를 합친 값이 100일 경우를 찾으면 될 것 같아서 "조합"을 떠올렸고, 관련 라이브러리를 검색하여 사용해보기를 먼저 시도하였다.

 

근데 잘 안돼서 구글링으로 나랑 비슷하게 접근한 코드를 조금 참고함.

import itertools

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

for i in itertools.combinations(array, 7):  # 해당 배열을 7명 중복없이 뽑아준다.
    if sum(i) == 100:  # 그합이 100이라면
        for j in sorted(i):  # 그 7명을 오름차순으로 정렬후 출력한다.
            print(j)
        break #그 후 반복문 탈출

이 분은 sum 내장함수를 사용하셨는데, 이 생각은 못했음...

아주 간단하게 한 조합의 요소들의 합을 구해서 100과 비교연산 해주고,

참이라면 sorted로 감싸주어 정렬한 뒤 출력해주는 방식을 사용하였다.

거기에 처음 입력받을 때도 한 줄로 깔끔간단하게 작성하였다.

나도 담에 저렇게 해봐야지 ...

 

from itertools import combinations

arr = []
for _ in range(9):
    height = int(input())
    arr.append(height)

for i in combinations(arr, 7):
    if sum(i) == 100:
        for j in sorted(i):
            print(j)
        break

해결 !

 


참고 :

https://ji-gwang.tistory.com/244

 

백준 2309번 파이썬 문제풀이(브루트 포스 - 일곱 난쟁이)

정답코드1 - for문 이용 array = [] for i in range(9): array.append(int(input())) array.sort() sum_ = sum(array) # 만약 모두다 더하고 2명을 뺐을 때 그 값이 100이라면 2개를 뺀 나머지 값들 출력 for i in range(len(array)): fo

ji-gwang.tistory.com

 

해안해