-
[백준] 2309번 일곱난쟁이Algorithm Study/Python 2024. 2. 26. 11:51
https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
풀이
입력으로 받는 9개의 숫자 중 7개의 합이 100이 되게 구해야한다.
이 경우에는 조합을 사용하여 9개 중 7개를 추출하여 모든 조합에 대하여 계산하면 쉽게 구할 수 있다.9C7은 36으로 모두 확인한다고해도 많은 시간이 소요되지 않는다.
import itertools data = [] for i in range(9): data.append(int(input())) data.sort() data_com = list(itertools.combinations(data, 7))
itertools의 combination 함수를 시용하여 조합을 쉽게 만들 수 있다.
for i in data_com: if sum(i) == 100: for j in i: print(j) break
이후 모든 조합에 대하여 합이 100이 되는지 계산하고 정답은 아무거나 출력하면 되기 때문에
답이 나오는 순간 출력 후 break를 해서 멈췄다.전체 코드
import itertools data = [] for i in range(9): data.append(int(input())) data.sort() data_com = list(itertools.combinations(data, 7)) for i in data_com: if sum(i) == 100: for j in i: print(j) break
순열, 조합을 구현할 수 있으면 쉽게 풀 수 있는 문제였다.
'Algorithm Study > Python' 카테고리의 다른 글
[백준] 2231번 분해합 (0) 2024.02.27 [백준] 2979번 트럭 주차 (2) 2024.02.27 [백준] 1159번 농구 경기 (1) 2024.01.28 [백준] 10988번 팰린드롬인지 확인하기 (0) 2024.01.28 [백준] 1343번 폴리오미노 (0) 2024.01.16