가장 간단하게 떠올릴 수 있는 풀이는 9명의 난쟁이 중 7명을 뽑아 합을 비교하여 합이 100이 되는 7명의 난쟁이를 찾는 것이다.
하지만 다르게 생각하면 9명의 난쟁이 중 가짜 난쟁이는 딱 2명이고, 그 2명이 빠지면 합이 정확히 100이 된다는 것!
결과적으로 우리는 그 가짜 난쟁이 2명만 찾아내면 되는 것이다.
이중 for문
을 사용할 수도 있지만, combinations
와 함께 for문을 한 개만 사용하여 아주 조금 더 간결하게 문제를 풀 수도 있다.
# 이중 for문을 이용한 풀이
import sys
heights = [int(sys.stdin.readline()) for _ in range(9)]
all_sum = sum(heights)
flag = False
for i in range(9):
for j in range(i+1, 9):
a, b = heights[i], heights[j]
if a + b == all_sum - 100:
heights.remove(a)
heights.remove(b)
flag = True
break
if flag:
break
print(*sorted(heights), sep='\n')
# combinations를 이용한 풀이
import sys
from itertools import combinations
heights = [int(sys.stdin.readline()) for _ in range(9)]
all_sum = sum(heights)
for h in list(combinations(heights, 2)):
if h[0] + h[1] == all_sum - 100:
heights.remove(h[0])
heights.remove(h[1])
break
print(*sorted(heights), sep='\n')
📌 리스트에서 요소의 삭제 📌
list = ['Sun', 'Cloud', 'Moon', 'Star']
# del 리스트[인덱스]
del list[2]
# 리스트.remove(값)
list.remove('Moon')
# 리스트.pop(인덱스)
# 입력 없이 pop()만 쓰면 맨 마지막 요소 삭제
list.pop(2)
# 요소 전체 삭제
list.clear()