문제
네 수가 등차수열을 이루는데, 이 중 하나가 빠져 있다. 나머지 세 수가 주어질 때 빠진 네 번째 수를 구하라.
입력
세 정수가 공백으로 구분되어 주어진다. 순서는 무작위이다.
출력
빠진 네 번째 수를 출력한다.
예제
| 입력 | 출력 |
|---|---|
4 6 8 | 2 |
10 1 4 | 7 |
풀이
세 수를 정렬한 뒤, 인접한 수들의 차이를 비교하여 빠진 수의 위치를 찾는다.
- 입력받은 세 수를 오름차순으로 정렬한다
- 인접한 두 차이
n1 = b - a,n2 = c - b를 계산한다 - 두 차이가 같으면 공차가 동일하므로,
c + n1이 빠진 수이다 (맨 뒤에 빠짐) - 차이가 다르면 더 큰 차이가 있는 쪽에 수가 빠져 있다
n2가 더 크면 b와 c 사이에 빠짐:c - min(n1, n2)출력n1이 더 크면 a와 b 사이에 빠짐:b - min(n1, n2)출력
핵심 아이디어: 등차수열에서 빠진 수가 있으면 공차의 2배가 되는 간격이 생기므로, 정렬 후 차이를 비교하면 빠진 위치를 알 수 있다.
코드
a, b, c = sorted(list(map(int, input().split())))
n1, n2 = b - a, c - b
if n1 == n2:
print(c + n1)
else:
n = min(n1, n2)
if n2 != n:
print(c - n)
else:
print(b - n)복잡도
- 시간: O(1) — 세 수의 정렬과 비교만 수행
- 공간: O(1) — 고정 크기 변수만 사용