기술 블로그

2141번 우체국 본문

알고리즘 문제/BOJ

2141번 우체국

parkit 2020. 1. 20. 18:03
728x90
반응형

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




처음에는 거리(마을 사이의 거리), 마을 위치와 인원 수 모두 고려하려고 하였으나,


문제의 핵심은 인원 수였다.


우선 입력 받은 마을과 인원 수를 정렬 시킨 다음


차례대로 각 마을의 인원 수를 더해가면서,


그 합이 (전체 총 인원 수 + 1) / 2보다 크거나 같을 때의


마을의 위치를 출력해주면 된다.



어쨌든 가치(?)인원 수가 제일 중요하고,


인원 수가 많은 쪽에 되도록 우체국을 설치해야 하니,


중심(=(전체 총 인원 수 + 1) / 2)을 기준으로


계산한다.





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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.io.*;
import java.util.*;
 
public class Main {
    
    static int n;
    static long total = 0;
    static Vector<pair> v = new Vector<pair>();
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        
        n = Integer.parseInt(br.readLine());
        
        for(int i=0; i<n; i++) {
            st = new StringTokenizer(br.readLine());
            long x = Long.parseLong(st.nextToken());
            long a = Long.parseLong(st.nextToken());
            total += a;
            v.add(new pair(x, a));
        }
        
        Collections.sort(v, new Comparator<pair>() {
            public int compare(pair p1, pair p2) {
                if(p1.first < p2.first) {
                    return -1;
                }
                else if(p1.first == p2.first) {
                    if(p1.second < p2.second) {
                        return -1;
                    }
                }
                return 1;
            }
        });    
        
        long people = 0;
        
        for(pair p : v) {
            people += p.second;
            if(people >= (total + 1/ 2) {
                bw.write(String.valueOf(p.first) + "\n");
                break;
            }
        }
 
        bw.flush();
        bw.close();
    }
}
 
class pair{
    long first, second;
    pair(long f, long s) {
        this.first = f;
        this.second = s;
    }
}
cs




























728x90
반응형

'알고리즘 문제 > BOJ' 카테고리의 다른 글

2812번 크게 만들기  (0) 2020.01.21
3109번 빵집  (0) 2020.01.20
18242번 네모네모 시력검사  (0) 2020.01.13
1780번 종이의 개수  (0) 2020.01.13
1748번 수 이어 쓰기 1  (0) 2020.01.12