https://www.acmicpc.net/problem/2437
해설코드(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])이 생기게 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ 11652] 카드(자바 적응기, 자료구조, Hashmap sort by key and value) (0) | 2020.08.06 |
---|---|
[BOJ 1449] 수리공 항승(C++) (0) | 2020.07.20 |
[BOJ 1783] 병든 나이트(C++) (0) | 2020.07.10 |
[BOJ 1138] 한 줄로 서기(C++). (0) | 2020.07.02 |
[BOJ 2624] 동전 바꿔주기(C++, 다이나믹 프로그래밍) (0) | 2020.06.27 |