반응형

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

 

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, 0 ≤ A[i] ≤ 1,000,000,000 이며 모든 입력은 정수이다.

www.acmicpc.net

 

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

 

2285번: 우체국

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

www.acmicpc.net

 

거리의 합이 최소가 되려면, 우체국은 어느 한 마을 위치에 지어져도 무방합니다.

우체국을 세울 위치를 구하려면, 우체국이 있는 지점에서 왼쪽과 오른쪽에 있는 사람의 수는 같거나 그 차이가 최소가 되어야합니다.

이를 구하기 위해 각 마을의 위치 오름차순으로 정렬한 뒤, 각 마을 별로 사람 수의 누적 합을 좌우 각각 구해주었습니다.

그 누적 합의 차가 최소인 지점이 사람의 수가 최소가 되는 지점이므로, 우체국이 세워질 위치입니다.

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<pair<int, int>> xa;
int n, x, a;
long long ls[100000], rs[100000], diff = 1e10;

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &x, &a);
		xa.push_back({ x, a });
	}
	sort(xa.begin(), xa.end());
	ls[0] = xa[0].second;
	rs[n - 1] = xa[n - 1].second;
	for (int i = 1; i < n; i++) {
		ls[i] = xa[i].second + ls[i - 1];
		rs[n - 1 - i] = xa[n - 1 - i].second + rs[n - i];
	}
	int idx = -1;
	for (int i = 0; i < n; i++) {
		long long d = abs(rs[i] - ls[i]);
		if (diff > d) {
			idx = i;
			diff = d;
		}
	}
	printf("%d", xa[idx].first);
}

 

 

아래 코드로 수정하였습니다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<pair<int, int>> xa;
int n, x, a, idx = -1;
long long diff = 1e10, s1 = 0, s2 = 0;
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &x, &a);
		xa.push_back({ x, a });
		s1 += a;
	}
	sort(xa.begin(), xa.end());
	for (int i = 0; i < n; i++) {
		s2 += xa[i].second;
		long long d = abs(s1 - s2);
		if (diff > d) {
			idx = i;
			diff = d;
		}
		s1 -= xa[i].second;
	}
	printf("%d", xa[idx].first);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 21939 : 문제 추천 시스템 Version 1  (0) 2021.11.18
백준 21924 : 도시 건설  (0) 2021.11.17
백준 13334 : 철로  (0) 2021.11.17
백준 6497 : 전력난  (0) 2021.11.17
백준 15926 : 현욱은 괄호왕이야!!  (0) 2021.11.17

+ Recent posts