본문 바로가기

알고리즘/백준

[BOJ 2437] 저울(C++, 자세한 설명)

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

 

2437번: 저울

하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓�

www.acmicpc.net

 

해설코드(C++).

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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
vector<int> v;
int val, next = 0, N;
 
int main() {
    cin >> N;
    for(int i = 1; i <= N; i++){
        cin >> val;
        v.push_back(val);
    }
    sort(v.begin(), v.end());
 
    int next = 1;
    for(int i = 0 ;i < v.size(); i++){
        if(next < v[i]){
            break;
        }
        next += v[i];
    }
    
    cout << next << endl;
    return 0;
}

 

next : 측정 가능을 확인해야 하는 값

 

 

next < v[i]일 경우, 측정할 수 없는 구간이 생긴다.

 

 

for문 내에 next 갱신되기 위한 순간을 생각해보자.

 

 

v[i]라는 추가 더해지면, 0 <= (측정 가능 값) < next에서,

 

 

v[i] <= (v[i] 추가 측정 가능 값) < v[i] + next가 될 것이다.

 

 

v[i]가 만약에 next보다 크다면, 범위에 의해서 측정할 수 없는 구간(next ~ v[i])이 생기게 된다.