[2141 우체국]
난이도: 골드4
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
문제
입력
출력
[아이디어]
입력할 때 우체국 위치 순서대로 입력한다는 말은 없기 때문에 중간에 정렬을 해줘야한다.
전체 인구 수의 절반 이상이 넘어가면 그 위치가 정답이 된다. 하지만 전체 인구 수가 홀수일 수 있어서 1을 더한 값으로 계산해줘야한다.
[JAVA 코드]
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tokens;
static int N;
static long total;
static Post [] nums;
static class Post implements Comparable<Post> {
int idx, n;
public Post(int i, int n) {
this.idx = i;
this.n = n;
}
@Override
public int compareTo(Post o) {
if(this.idx == o.idx) {
return Integer.compare(this.n, o.n);
}
return Integer.compare(this.idx, o.idx);
}
}
public static void main(String[] args) throws IOException {
N = Integer.parseInt(br.readLine());
nums = new Post [N];
for(int i = 0; i < N; i++) {
tokens = new StringTokenizer(br.readLine());
int idx = Integer.parseInt(tokens.nextToken());
int n = Integer.parseInt(tokens.nextToken());
nums[i] = new Post(idx, n);
total += n;
}
Arrays.sort(nums);
long sum = 0;
for(int i = 0; i < N; i++) {
sum += nums[i].n;
if(sum >= (total + 1) / 2) {
System.out.println(nums[i].idx);
break;
}
}
}
}
'알고리즘 > BAEKJOON' 카테고리의 다른 글
[백준] 14503 로봇 청소기 (Java) (0) | 2022.06.06 |
---|---|
[백준] 17779 게리맨더링2 (Java) (0) | 2022.06.03 |
[백준] 13265 색칠하기 (Java) (0) | 2022.05.29 |
[백준] 11653 소인수분해 (Java) (0) | 2022.05.26 |
[백준] 2580 스도쿠 (Java) (0) | 2022.05.21 |
댓글