아이공의 AI 공부 도전기

[Baekjoon] 2309번 : 일곱 난쟁이 (Python, 브루트 포스, 유사 : 3040번)

 

     

 

 

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

 

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

 

유사 문제 : https://www.acmicpc.net/problem/3040

 

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

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

www.acmicpc.net

 

 

코드 링크

https://github.com/stellaluminary/Baekjoon

 

GitHub - stellaluminary/Baekjoon

Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.

github.com

 

Python

 

방법 1 - 메모리 30840KB / 시간 68ms / 코드 길이 240B

 

9명 중 7명의 합이 100이라면 9명 중 2명의 키의 합을 빼면 100이 나오는 list를 찾으면 된다.

 

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

for i in range(8):
    for j in range(i+1, 9):
        if sum(d) - (d[i]+d[j]) == 100:
            m = [d[i], d[j]]
            break

d.remove(m[0])
d.remove(m[1])

print('\n'.join(map(str,sorted(d))))

 

 

방법 2 - 메모리 30840KB / 시간 68ms / 코드 길이 187B

 

9명 중 7명을 뽑아 합이 100이 되는 것을 찾아 출력

 

from itertools import combinations
d = [int(input()) for _ in range(9)]
for i in combinations(d, 7):
    if sum(i) == 100:
        n = i
        break
print('\n'.join(map(str,sorted(i))))

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading