일직선 상의 마을에 여러 채의 집이 위치해 있다. 이중에서 특정 위치의 집에 특별히 한 개의 안테나를 설치하기로 결정했다. 효율성을 위해 안테나로부터 모든 집까지의 거리의 총 합이 최소가 되도록 설치하려고 한다. 이 때 안테나는 집이 위치한 곳에만 설치할 수 있고, 논리적으로 동일한 위치에 여러 개의 집이 존재하는 것이 가능하다. 집들의 위치 값이 주어질 때, 안테나를 설치할 위치를 선택하는 프로그램을 작성하시오.
입력
- 집의 수 N (1<=N<=200,000)
- N채의 집에 위치가 공백을 기준으로 구분 (1이상 100,000이하의 자연수)
출력
- 안테나를 설치할 위치의 값 출력 (단 여러 개의 값 도출 시 가장 작은 값 출력)
1에서부터 100,000까지 돌며 모든 경우의 수를 계산하여 최솟값을 반환하는 형식으로 하는 경우 어떨까 집의 200,000개이고 100,000까지 위치하는 경우 ? 오 답도 없을거 같은데,,, 근데 그게 맞는거 같은데 ,,,
일단 질러
N = int(input())
loc = list(map(int, input().split()))
distance_sum = 100_000_000
min_idx = -1
for i in range(1, max(loc) + 1):
min_sum = 0
for l in loc:
min_sum += abs(i-l)
if distance_sum > min_sum:
min_idx = i
distance_sum = min_sum
print(min_idx)
이럴줄 알아써
그럼 다른 방법을 생각해보자궁
아 문제 제대로 안읽었네 ;;;
현타 온다. 이거 그냥 정렬해서 중간값 출력하면 된다.
N = int(input())
loc = list(map(int, input().split()))
loc.sort()
center_idx = (N-1)//2
print(loc[center_idx])
음 야무지죵