티스토리 뷰

Algorithm

[백준 2437] 저울

devbelly 2021. 6. 13. 18:41

문제

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

 

알고리즘

Greedy

 

풀이

$N$개의 저울이 주어졌을 때, 잴 수 없는 무게의 최솟값을 구하는 문제입니다.

 

기존에 잴 수 있는 구간이 [0,R] 일 때, 새로운 추 A가 새로이 등장하면 새롭게 잴 수 있는 구간은 [A,A+R] 일 것입니다. 만일 R+1>=A 라면 이 구간은 [0,A+R]로 통합되어 잴 수 있는 구간이 새로이 갱신되겠지만 아니라면 답은 R+1입니다.

즉, 추의 무게를 정렬한 후 R과 추가할 추 A의 무게를 계속해서 비교해주면 됩니다. R은 잴 수 있는 무게의 최댓값이므로 지금까지의 추의 무게의 총합입니다.

 

코드

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < n; ++i)
#define REP(i, n) for (int i = 1; i <= n; ++i)
using namespace std;

int main() {
#ifndef ONLINE_JUDGE
    freopen("in", "r", stdin);
    freopen("out", "w", stdout);
#endif
    cin.tie(NULL);
    cout.tie(NULL);
    ios::sync_with_stdio(false);

    int N;
    cin >> N;
    vector<int> vt(N);
    rep(i, N) cin >> vt[i];
    sort(vt.begin(), vt.end());
    int sum = 0;
    bool temp = false;
    rep(i, N) {
        if (sum + 1 < vt[i]) {
            temp = true;
            cout << sum + 1;
            break;
        }
        sum += vt[i];
    }
    if (!temp) cout << sum + 1;
    return 0;
}

'Algorithm' 카테고리의 다른 글

[백준 1662] 압축  (0) 2021.06.30
[백준 5214] 환승  (0) 2021.06.25
[백준 5917] Roadblock  (0) 2021.05.31
[백준 17612] 쇼핑몰  (0) 2021.05.28
[백준 10652] Piggy Back  (0) 2021.05.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함