QA & Engineering Blog

A Blog about Quality · Automation · Engineering

🏠 홈으로

[Gold IV] 우체국 - 2141

문제 링크

성능 요약

메모리: 47940 KB, 시간: 4224 ms

분류

그리디 알고리즘, 정렬

문제 설명

수직선과 같은 일직선상에 N개의 마을이 위치해 있다. i번째 마을은 X[i]에 위치해 있으며, A[i]명의 사람이 살고 있다.

이 마을들을 위해서 우체국을 하나 세우려고 하는데, 그 위치를 어느 곳으로 할지를 현재 고민 중이다. 고민 끝에 나라에서는 각 사람들까지의 거리의 합이 최소가 되는 위치에 우체국을 세우기로 결정하였다. 우체국을 세울 위치를 구하는 프로그램을 작성하시오.

각 마을까지의 거리의 합이 아니라, 각 사람까지의 거리의 합임에 유의한다

입력

첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 X[1], A[1], X[2], A[2], …, X[N], A[N]이 주어진다. 범위는 |X[i]| ≤ 1,000,000,000, 1 ≤ A[i] ≤ 1,000,000,000 이며 모든 입력은 정수이다.

출력

첫째 줄에 우체국의 위치를 출력한다. 가능한 경우가 여러 가지인 경우에는 더 작은 위치를 출력하도록 한다.

💡 Solutions

📄 우체국.py

N = int(input())


Xs = []
num = 0
for i in range(N):
    x, a = map(int,input().split())
    Xs.append([x,a])
    num += a

Xs.sort(key=lambda x:x[0])
cnt = 0
for a, b in Xs:
    cnt += b
    if cnt >= num/2:
        print(a)
        break