archive

[백준] 일곱 난쟁이 (Python) 본문

STUDY/알고리즘

[백준] 일곱 난쟁이 (Python)

seonyounggg 2021. 3. 1. 17:38

✏️ 문제

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

✏️ 풀이

아홉 명의 난쟁이 중 선택한 일곱 명의 키의 합이 100이 될 경우를 찾아야 한다.

9C7의 결과를 완전 탐색하며, 결과에 맞는 조합을 찾을 시 break한다.

조합들을 구하기 위해 itertools.combination()을 사용하였다.

동일한 방식으로, 9C2의 조합에 대해 탐색하며 모든 원소의 합에서 선택한 두 원소의 합을 빼는 방식으로 구현해도 된다.

( 참고 ↓ )

 

[파이썬] itertools모듈

리스트 조합 관련된 알고리즘 문제를 풀다 보면 itertools 라이브러리가 풀이에 종종 등장한다. 사실 처음 봤을 땐 라이브러리 사용법을 암기해서 쓰는 것보다 직접 구현하는 게 차라리 빠르겠다

seonyounggg.tistory.com

itertools를 사용하지 않는 경우에는 이중 포문으로 두가지 원소를 선택하면 된다.

✏️ 코드

import itertools
height = [int(input()) for _ in range(9)]
ans = []
for h in itertools.combinations(height, 7):
    if sum(h) == 100:
        ans = sorted(h)
        break

for i in ans:
    print(i)

✏️ 생각

itertools 모듈에 익숙해지니까 유용하게 쓰이는 것 같다!

 

Comments