국영수
문제 Acmicpc
Solution
1 | n=int(input()) |
처음 이 문제를 보고 1부터 n까지 각 요소에 대한 차이의 합을 계산해서 최소가 되는 인덱스를 반환하면 되지 않을까 했다.
(틀린 코드)
1 | n=int(input()) |
당연히 시간 초과가 났다. 처음 작성한 코드는 시간복잡도가 O(N^2)
이고 주어진 자연수의 범위가 20만까지이므로 20만의 제곱이 된다.
문제를 잘못 읽었었다. 나는 1,5,7,9가 주어질 때 1에서 9까지의 모든 정수부를 계산했는데, 다시 보니 주어진 값에서만 안테나를 설치할 위치를 고를 수 있었다.
주어진 리스트를 오름차순으로 정렬하고 중간 값을 반환하면 최적의 위치가 된다. 짝수일 경우 중간값이 2개가 되는데, 문제를 보면 여러 값일 경우 가장 작은 값을 출력하라고 했기 때문에 중간에 있는 인덱스를 계산할 때 n
이 아닌 n-1
로 생각하면 된다.