본문 바로가기
Coding Test/Problems

[BOJ] 3040번: 백설 공주와 일곱 난쟁이

by haerr 2024. 7. 5.

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

 

 

문제

매일 매일 일곱 난쟁이는 광산으로 일을 하러 간다. 난쟁이가 일을 하는 동안 백설공주는 그들을 위해 저녁 식사를 준비한다. 백설공주는 의자 일곱개, 접시 일곱개, 나이프 일곱개를 준비한다.

어느 날 광산에서 아홉 난쟁이가 돌아왔다. (왜 그리고 어떻게 아홉 난쟁이가 돌아왔는지는 아무도 모른다) 아홉 난쟁이는 각각 자신이 백설공주의 일곱 난쟁이라고 우기고 있다.

백설공주는 이런 일이 생길 것을 대비해서, 난쟁이가 쓰고 다니는 모자에 100보다 작은 양의 정수를 적어 놓았다. 사실 백설 공주는 공주가 되기 전에 매우 유명한 수학자였다. 따라서, 일곱 난쟁이의 모자에 쓰여 있는 숫자의 합이 100이 되도록 적어 놓았다.

아홉 난쟁이의 모자에 쓰여 있는 수가 주어졌을 때, 일곱 난쟁이를 찾는 프로그램을 작성하시오. (아홉 개의 수 중 합이 100이 되는 일곱 개의 수를 찾으시오)

 

-> 문제 요약: 주어진 9개의 수 중, 더해서 100이 되는 7개의 숫자를 찾아라.

 

풀이

완전탐색으로 파이썬의 조합을 이용하면 쉽게 풀 수 있다.

from itertools import combinations as cb

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

for x in cb(li, 7):
    if sum(x) == 100:
        print(*x, sep = '\n')
        break

 

1. 필요한 모듈을 import 한다.

2. li에 9개의 수를 입력받는다.

3. 조합으로 7개를 추출한 뒤, 합이 100인 조합을 출력한다.

 

여담으로 6개월 전에 풀었을 때의 코드를 발견했는데, 더 클린한 코드가 된 거 같아서 뿌듯했다😜

 

#예전 코드
from itertools import combinations as cb
n = []
for _ in range(9):
    n.append(int(input()))
for i in cb(n, 7):
    if sum(i) == 100:
        print('\n'.join(map(str, i)))
        break

'Coding Test > Problems' 카테고리의 다른 글

[BOJ] 1057번: 토너먼트  (1) 2024.07.07
[BOJ] 15651번: N과 M (3)  (0) 2024.07.07
[BOJ] 10974번: 모든 순열  (0) 2024.07.05
[BOJ] 1895번: 필터  (1) 2024.07.04
[BOJ] 1018번: 체스판 다시 칠하기  (4) 2024.07.04