[코테] 정렬 - 안테나

uuuu.jini·2022년 11월 29일
0

안테나


18310

일직선 상의 마을에 여러 채의 집이 위치해 있다. 이중에서 특정 위치의 집에 특별히 한 개의 안테나를 설치하기로 결정했다. 효율성을 위해 안테나로부터 모든 집까지의 거리의 총 합이 최소가 되도록 설치하려고 한다. 이 때 안테나는 집이 위치한 곳에만 설치할 수 있고, 논리적으로 동일한 위치에 여러 개의 집이 존재하는 것이 가능하다. 집들의 위치 값이 주어질 때, 안테나를 설치할 위치를 선택하는 프로그램을 작성하시오.

입력

  • 집의 수 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])

음 야무지죵

profile
멋쟁이 토마토

0개의 댓글