[백준_2309] 일곱 난쟁이

wkkyu08·2021년 8월 5일
0

백준

목록 보기
16/17

🔴 문제


🟢 풀이

가장 간단하게 떠올릴 수 있는 풀이는 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()

0개의 댓글

관련 채용 정보