개발/python

[백준 2309번] 일곱 난쟁이 - python

dotudy 2025. 8. 11. 23:05

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

📌 문제 탐색하기

  1. 총 아홉 개의 수가 주어짐.
  2. 일곱 명만 진짜 난쟁이
  3. 7명의 총합이 100
  4. 가능한 정답이 여러 가지인 경우는 아무거나 출력하고 총합이 100이 안 되는 경우는 없다.

→ 7개를 더하기 보다는 9개에서 2개를 빼자!

배열에 저장해서 sort하고 2개를 제거하면서 총합 100이 되는 경우를 찾자.

📌 코드 설계하기

  • for문으로 배열에 9개 값 저장하기
  • 배열 sort하기 및 100과 9개 값 총합 차이 구하기
  • 이중 for문 돌면서 2개씩 뽑아서 더한 값이 전에 구한 차이와 같은지 확인
  • 같을 경우 break!
  • → for문이 두 개라서 flag를 둬서 외부 for문 깨기

📌 정답 코드

arr = []
for i in range (9):
    arr.append(int(input()))

arr = sorted(arr)
diff = sum(arr) - 100
flag = False
for i in range (8):
    for j in range(i+1, 9, 1):
        if (arr[i] + arr[j]) == diff:
            temp = arr[j]
            arr.remove(arr[i])
            arr.remove(temp)
            flag = True
            break
    if flag == True:
        break

for i in range(len(arr)):
    print(arr[i])