[Python] 일곱 난쟁이 - 조합

Saemi Min·2023년 1월 28일
0

BaekJoon

목록 보기
1/30
post-thumbnail

해당 문제 링크

풀이

#일곱 난쟁이

from itertools import combinations

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

b=list(combinations(arr,7))

res=0
for i in range(len(b)):
    c=[]
    res=0
    for j in range(7):
        x=int(b[i][j])
        res+=x
        c.append(x)
    if(res==100):
        c.sort()
        for j in range(7):
            print(c[j])
        break

Git - 코드

해석

조합 문제로 itertools 라이브러리의 combinations 함수를 사용했다.
난쟁이 9명 중 7명을 뽑는 경우의 수를 모두 구해서 해당 요소들을 더하여 100이 나왔을 때 하나씩 출력하였다.
combinations 함수의 반환 값으로는 튜플이고 이를 list()로 감싸면서
이중 리스트처럼 값을 빼오도록 하였다. 이 과정에서 코드가 좀 더 길어진 것 같아 아쉽다

그래서 다른 사람의 풀이도 함께 보니 도움이 되었다.

from itertools import combinations as cb

heights = []

for _ in range(9):
    heights.append(int(input()))

list_cb = list(cb(heights,7))

for numbers in list_cb:
    if sum(numbers) == 100:
        numbers = list(numbers)
        numbers.sort()
        for number in numbers:
            print(number)
        break

와 같이 바로 sum() 함수를 사용하여 합한 값을 바로 list에 넣어 정렬 후 출력하는 것이다.
이처럼 깔끔하게 코드 쓰는 법도 배웠다. 하지만 내 코드와 비교했을 때 사용된 메모리는 같았지만, 시간이 4ms 가 더 느린 코드였다. 코드의 길이와 실행 시간은 비례하지 않는구나를 느꼈다.

출처 코드

이후, 해당 문제 다 풀 예정

profile
I believe in myself.

0개의 댓글