Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

0과 1 사이

[파이썬(python)] 정렬 문제 안테나 백준 18310 본문

코딩테스트

[파이썬(python)] 정렬 문제 안테나 백준 18310

고후 2022. 1. 19. 17:55

https://www.acmicpc.net/problem/18310

 

18310번: 안테나

첫째 줄에 집의 수 N이 자연수로 주어진다. (1≤N≤200,000) 둘째 줄에 N채의 집에 위치가 공백을 기준으로 구분되어 1이상 100,000이하의 자연수로 주어진다.

www.acmicpc.net

집의 개수와 위치 값이 주어질 때 안테나를 설치할 위치를 선택하는 프로그램 작성

예를들어 n = 4이고 위치가 1, 5, 7, 9일때

5의 위치에 설치해야 안테나로부터 모든 집까지의 거리의 총합이 4+0+2+4 = 10으로 최소가 된다

따라서 5를 출력하면 된다.

 

원래는 이렇게 생각했다.

안테나는 집이 위치한 곳에만 설치할 수 있으므로

모든 집의 좌표를 돌면서 거리 총합을 계산하고, 최소가 되는 값을 선택하기!

직접 모두 계산해보는 방법을 생각했다.

 

python 코드

n = int(input())
house = list(map(int, input().split()))

#집의 좌표 오름차순 정렬
house.sort()

min_distance = 100000
for i in house:

#i가 안테나 위치
    distance = 0
    for j in house:
        distance += abs(i-j)
    if distance < min_distance:
        min_distance = distance
        min_antena = i

print(min_antena)

그런데 시간 초과가 났다. 쉬운 문제라고 생각했는데..

문제 풀면서 시간복잡도가 N*N이라 왠지 불안하긴 했는데 효율성을 높여야 하나보다.

 

 

다시 생각해보니 안테나는 집 위치들의 중간에 놓여야 가장 가까워진다는 것을 깨달았다.

다시말해 중간값이 되는 것이다. ㅜㅜ

이렇게 간단하다니.

 

최종 코드

 

n = int(input())
house = list(map(int, input().split()))
house.sort()

print(house[(n-1)//2])

 

어쩐지 쉬운 문제인데 정답률이 30퍼 정도였는데,, 다들 비슷한 이유로 틀렸을 것 같다

Comments