728x90
2141번: 우체국
첫째 줄에 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 이며 모든 입력은 정수이다.
www.acmicpc.net
🤔 문제분석
그리디 유형 문제로 마을의 위치 기준으로 오름차순 정렬한뒤에 사람의 수를 더해가면서 (모든 마을사람들의 수 / 2) 보다 커질경우 그 마을은 우체국의 위치가 된다. 마을 사람들이 절반이 되었을때가 우체국의 최적의 위치가 된다.
💻 코드
import sys
input = sys.stdin.readline
N = int(input())
village = []
all_people = 0
for _ in range(N):
x, people = map(int, input().split())
village.append((x, people))
all_people += people
village.sort(key=lambda x:x[0])
acc_people = 0
for i in range(N):
acc_people += village[i][1]
if acc_people >= all_people / 2:
print(village[i][0])
break
🎯 피드백 및 개선사항
그리디 유형의 문제로 처음에 해당 문제를 어떻게 풀어야할지 감을 잡지 못하였다. 이분탐색으로 문제를 접근하였고,,, 실패하였다. 문제를 정답을 찾아보니 그리디 유형의 문제였고, (모든 마을사람들의 수 / 2) 보다 커질경우 그 마을이 우체국의 위치가 된다.
역시 그리디 유형의 문제는 어렵다… 😢
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1939번 : 중량제한 (0) | 2024.02.19 |
---|---|
[백준] 1135번 : 뉴스전하기 (0) | 2024.02.18 |
[백준] 1826번 : 연료 채우기 (1) | 2024.02.17 |
[백준] 3649번 : 로봇 프로젝트 (0) | 2024.02.17 |
[백준] 1374번 : 강의실 (0) | 2024.02.16 |