세상을 더 좋게

[백준] 2309 '일곱 난쟁이' 파이썬(python) 본문

Algorithm/브루트 포스

[백준] 2309 '일곱 난쟁이' 파이썬(python)

나는SOU 2022. 1. 12. 00:00

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

list = [int(input()) for i in range(9)]
total = sum(list)

for i in range(9):
    for j in range(i+1, 9):
        if total - (list[i] + list[j]) == 100:
            num1, num2 = list[i], list[j]
            
            list.remove(num1)
            list.remove(num2)
            list.sort()
            
            for i in range(len(list)):
                print(list[i])
            break
            
    if len(list) < 9:
        break

Point

  • 어떠한 규칙을 사용해서 해결법을 찾으려 해도 직관적으로 무식하게 해야하는 문제라는 것을 알 수 있다. 결국 일일이 더하며 비교해야 하는 문제이기에 브루트 포스. 즉 완전탐색을 할 수 밖에 없다.
  • 9개 중에 7개를 더해서 100을 찾을 수도 있겠지만, 2개를 빼서 합이 100인 것을 찾을 수도 있다. 따라서 뒤의 방법이 더 효율적일 거 같아 2개를 찾는 방법으로 하게 되었다.
  • sort()함수를 사용하면 오름차순으로 정렬 된다.