-
[백준] 2309번_일곱난쟁이Study/알고리즘 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()
'Study > 알고리즘' 카테고리의 다른 글
[백준] 14500번_테트로미노 (0) 2020.02.15 [백준] 1476번_날짜계산 (0) 2020.02.15 [백준] 6588번_골드바흐의추측 (0) 2020.02.14 [백준] 9613번_GCD합 (0) 2020.02.14 [백준] 1934번_최소공배수 (0) 2020.02.14