Study/알고리즘
[백준] 2309번_일곱난쟁이
혤리
2020. 2. 15. 00:00
문제 링크 : https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
import sys
dwarf = []
for _ in range(9):
dwarf.append(int(input()))
for i in range(8):
for j in range(i+1,9):
sum_ = 0
for d in range(len(dwarf)):
if d!=i and d!=j:
sum_ += dwarf[d]
if sum_ == 100:
dwarf[i] = dwarf[j] = 0
dwarf = sorted(dwarf)
for d in dwarf:
if d!=0:
print(d)
sys.exit()
위의 코드는 시간복잡도 O(N^3)이다.
새로운 i,j가 나올 때마다 그 i,j를 제외한 나머지 인덱스에 대한 합을 구하는 대신,
처음에 아홉 난쟁이들의 키의 합을 구한 후, 빼주는 방식으로 한다면 O(N^2)을 가질 수 있다.
dwarf = []
tall = 0
for i in range(9):
dwarf.append(int(input()))
tall += dwarf[i]
dwarf = sorted(dwarf)
for i in range(8):
for j in range(i+1,9):
if (tall-dwarf[i]-dwarf[j] == 100):
for t in range(len(dwarf)):
if t!=i and t!=j:
print(dwarf[t])
sys.exit()