๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 2141๋ฒˆ - ์šฐ์ฒด๊ตญ

by ์•ˆ์ฃผํ˜• 2022. 9. 13.

๋ฌธ์ œ

 

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

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <algorithm>
#define ll long long int

using namespace std;

ll sum[100001];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    ll N; cin>>N;
    vector<pair<ll, ll>> v;
    for(int i=0; i<N; i++){
        ll a, b; cin>>a>>b;
        v.push_back({a, b});
    }
    sort(v.begin(), v.end());
    sum[0] = v[0].second;
    for(int i=1; i<N; i++) sum[i] = sum[i-1] + v[i].second; // ์‚ฌ๋žŒ ์ˆ˜ ๋ˆ„์  ํ•ฉ
    
    ll start = 0, end = N-1;
    ll idx = 1e9;
    while(start <= end){
        ll mid = (start + end) / 2;
        if(sum[mid] >= sum[N-1] - sum[mid]){
            end = mid - 1;
            idx = min(idx, v[mid].first);
        }
        else start = mid + 1;
    }
    cout<<idx;
}

 

ํ’€์ด

๋ฌธ์ œ ๋ถ„๋ฅ˜๋Š” ๊ทธ๋ฆฌ๋””๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ ์ €๋Š” ๋ˆ„์ ํ•ฉ๊ณผ ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•˜์—ฌ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ ์œ„์น˜๊นŒ์ง€์˜ ์‚ฌ๋žŒ ์ˆ˜๋ฅผ ๋ˆ„์ ํ•ฉ์„ ํ†ตํ•ด ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ด๋ถ„ํƒ์ƒ‰์„ ํ†ตํ•ด ์šฐ์ฒด๊ตญ์„ ์„ธ์šธ ์œ„์น˜๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ˜„์žฌ ์œ„์น˜ ๊นŒ์ง€ ๋”ํ•œ ์‚ฌ๋žŒ ์ˆ˜๊ฐ€ ์šฐ์ธก์˜ ์‚ฌ๋žŒ๋“ค ์ˆ˜ ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ํ•œ ์นธ ๋” ์ขŒ์ธก์œผ๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 
  4. ํ˜„์žฌ ์œ„์น˜๊นŒ์ง€ ๋”ํ•œ ์‚ฌ๋žŒ ์ˆ˜๋ณด๋‹ค ์šฐ์ธก์˜ ์‚ฌ๋žŒ๋“ค ์ˆ˜๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ์šฐ์ธก์œผ๋กœ ํ•œ ์นธ ๋” ๊ฐ€๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  5. ์ด๋ฅผ ํ†ตํ•ด ์ตœ์ ์˜ ์œ„์น˜๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€