시냅스

백준 boj 2309 - 일곱 난쟁이 (파이썬, python) 본문

알고리즘

백준 boj 2309 - 일곱 난쟁이 (파이썬, python)

ted k 2022. 2. 9. 17:45

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

브루트포스를 단순히 모든 가능성을 체크하는 이중 반복문을 통해 풀었다.

총 합에서 두 개의 요소를 삭제했을 때 100이 나오게 되면 정답으로 처리해주었다.

다만, 파이썬 문법에 아직은 익숙하지 않다고 느끼는 부분이 몇몇 있었는데,

 

del 키워드를 이용해서 리스트의 요소를 삭제하면

리스트의 인덱스가 무너져 원하지 않는 값이 도출된다는 점,

마찬가지로 remove 키워드를 사용하여 삭제할 때에도

원소를 직접 삭제하면 위와 같은 현상이 다시 발생하지만,

변수를 하나 할당하여 리스트에서 찾은 뒤 삭제하게하면 원하는 값을 도출할 수 있었다.

 

쉬운 문제라고 생각했다가 오히려 많이 배웠다.

 

code

 

nine_list = [int(input()) for i in range(9)]

total = sum(nine_list)
for i in range(9):
    if len(nine_list) < 9: # index out of range error 피하기 위해 씀
        break
    for j in range(i + 1, 9):
        if total - nine_list[i] - nine_list[j] == 100:
            num1, num2 = nine_list[i], nine_list[j] # 애네 del로 바로 지우면 인덱스 무너짐
            nine_list.remove(num1)
            nine_list.remove(num2)
            nine_list.sort()
            for i in range(7):
                print(nine_list[i])
            break

 

Comments