
ํ๋์ ์ํ ์ ์ธ์ ์ด์ฉํ์ฌ ๋ฌผ๊ฑด์ ๋ฌด๊ฒ๋ฅผ ์ธก์ ํ๋ ค๊ณ ํ๋ค. ์ด ์ ์ธ์ ์ ํ์ ๋์๋ ๋ฌผ๊ฑด์ด๋ ์ถ๋ฅผ ์ฌ๋ ค๋๋ ์ ์๊ฐ ๋ฌ๋ ค ์๊ณ , ์ํ์ ๊ธธ์ด๋ ๊ฐ๋ค. ๋ํ, ์ ์ธ์ ํ์ชฝ์๋ ์ ์ธ์ถ๋ค๋ง ๋์ ์ ์๊ณ , ๋ค๋ฅธ ์ชฝ์๋ ๋ฌด๊ฒ๋ฅผ ์ธก์ ํ๋ ค๋ ๋ฌผ๊ฑด๋ง ์ฌ๋ ค๋์ ์ ์๋ค.
๋ฌด๊ฒ๊ฐ ์์ ์ ์์ธ N๊ฐ์ ์ ์ธ์ถ๊ฐ ์ฃผ์ด์ง ๋, ์ด ์ถ๋ค์ ์ฌ์ฉํ์ฌ ์ธก์ ํ ์ ์๋ ์์ ์ ์ ๋ฌด๊ฒ ์ค ์ต์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, ๋ฌด๊ฒ๊ฐ ๊ฐ๊ฐ 3, 1, 6, 2, 7, 30, 1์ธ 7๊ฐ์ ์ ์ธ์ถ๊ฐ ์ฃผ์ด์ก์ ๋, ์ด ์ถ๋ค๋ก ์ธก์ ํ ์ ์๋ ์์ ์ ์ ๋ฌด๊ฒ ์ค ์ต์๊ฐ์ 21์ด๋ค.
7
3 1 6 2 7 30 1
์ฃผ์ด์ง ์ถ๋ค๋ก ์ธก์ ํ ์ ์๋ ์์ ์ ์ ๋ฌด๊ฒ ์ค ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
21
ํ ๋ฒ์ ํ๋์ฉ ์ถ๋ฅผ ์ ํํ๋ฉด์ ๋ง๋ค ์ ์๋ ๋ฌด๊ฒ์ ๋ฒ์๋ฅผ ํ์ฅํด ๋๊ฐ๋ ๋จ๊ณ๋ก ๋๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ 1๋ถํฐ ์ฐจ๋ก๋ก ๋ง๋ค ์ ์๋ ๋ชจ๋ ๋ฌด๊ฒ๋ฅผ ์ต๋ํ ๋ง๋ค์ด๋ด ๋๋ค. ๊ทธ๋ฌ๋ค ํ์ฌ ์ถ๋ก ๋ง๋ค ์ ์๋ ์ฒซ๋ฒ์งธ ๋ฌด๊ฒ๊ฐ ๋์ค๋ฉด ๊ทธ๊ฒ ๋ต์ด ๋ฉ๋๋ค.
๊ฐ์ฅ ๊ฐ๋ฒผ์ด ์ถ๋ถํฐ ํ๋์ฉ ์ ํํ๋ ๊ฒ, ๊ฐ์ฅ ์ข์ ์ ํ์ ๋๋ค. ์์ ๋ฌด๊ฒ๋ถํฐ ์์๋๋ก ์ธก์ ๊ฐ๋ฅํ ๋ฒ์๋ฅผ ์ ์ ๋ํ๋๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฐ๋ผ์ ์ฐ์ ์ถ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด ์ค๋๋ค.
const weights = [3, 1, 6, 2, 7, 30, 1].sort((a, b) => a - b);
// [1, 1, 2, 3, 6, 7, 30] ์ด๋ ๊ฒ ์ ๋ ฌ๋ฉ๋๋ค.
๋ง๋ค ์ ์๋ ์ต๋ ๋ฌด๊ฒ์ ๋ฒ์๋ฅผ target ์ด๋ผ๊ณ ํ๋ฉด, ์ฒ์์๋ 1 ๋ถํฐ ์์ํฉ๋๋ค. ์ฆ, ํ์ฌ๊น์ง ๋ง๋ค ์ ์๋ ๋ฒ์๋ 1 ~ (target - 1) ์
๋๋ค.

| ํ์ฌ ์ถ | target | ์ target | |
|---|---|---|---|
| 1 | 1 โฆ 1 (โ ) | 1 | 1 + 1 = 2 |
| 1 | 1 โฆ 2 (โ ) | 2 | 2 + 1 = 3 |
| 2 | 2 โฆ 3 (โ ) | 3 | 3 + 2 = 5 |
| 3 | 3 โฆ 5 (โ ) | 5 | 5 + 3 = 8 |
| 6 | 6 โฆ 8 (โ ) | 8 | 8 + 6 = 14 |
| 7 | 7 โฆ 14 (โ ) | 14 | 14 + 7 = 21 |
์ฌ๊ธฐ๊น์ง ํ์ ๋, 1 ๋ถํฐ 20๊น์ง ๋ง๋ค ์ ์๋ ๊ฒ๋๋ค.
์ด๋ค ์ถ์ ๋ฌด๊ฒ๊ฐ target๋ณด๋ค ํฌ๋ฉด, ๊ทธ ์๊ฐ์ด target ๋ฌด๊ฒ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ด๊ณ ๋ต์ด ๋ฉ๋๋ค.
| ํ์ฌ ์ถ | target | ์ target | |
|---|---|---|---|
| 30 | 30 > 21 (โ) | 21 | - |
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํฉ๋๋ค.
const target = 1; // ๋ฌํ ๋ฌด๊ฒ๋ ๋ฌด์กฐ๊ฑด ์ถ์ ๋์ ๊ฐ๋ณด๋ค 1์ฉ ์ปค์ง๋๋ก 1๋ก ์์ํฉ๋๋ค.
// ์ถ ๋ฐฐ์ด์ ์ํํ๋ฉด์ target(์ถ์ ๋์ ๊ฐ + 1)์ ๋ง๋ค ์ ์๋ ์ง ๋น๊ตํฉ๋๋ค.
for(let i = 0; i < weights.length; i++) {
if(weights[i] <= target) {
// ํ์ฌ ์ถ์ ๋ฌด๊ฒ๊ฐ target๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๋ง๋ค ์ ์๋ ๋ฌด๊ฒ์
๋๋ค.
// ํ์ฌ ์ถ๋ฅผ ์ฌ์ฉํด ๋ง๋ค ์ ์๋ ๋ฌด๊ฒ๋ฅผ ๋๋ ค์ค๋๋ค. (target์ ํ์ฌ ์ถ ๋ฌด๊ฒ๋ฅผ ๋ํฉ๋๋ค.)
target += weights[i]
} else {
// ์ถ์ ๋ฌด๊ฒ๊ฐ target๋ณด๋ค ํฌ๋ฉด, ํด๋น ๊ฐ์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก target์ด ๋ต์ด ๋๋ฏ๋ก ์ํ๋ฅผ ๋ฉ์ถฅ๋๋ค.
break;
}
}
์ค์ ๋ก ํ์ธ์ ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด 20๊น์ง ๋ง๋ค ์ ์๊ณ , 21์ ๋ง๋ค ์ ์์ต๋๋ค.
target : 1 = 1
target : 2 = 1 + 1
target : 3 = 1 + 2
target : 4 = 1 + 1 + 2
target : 5 = 2 + 3
target : 6 = 1 + 2 + 3
target : 7 = 1 + 1 + 2 + 3
target : 8 = 2 + 6
target : 9 = 3 + 6
target : 10 = 1 + 3 + 6
target : 11 = 1 + 1 + 3 + 6
target : 12 = 1 + 2 + 3 + 6
target : 13 = 1 + 2 + 3 + 7
target : 14 = 1 + 1 + 2 + 3 + 7
target : 15 = 2 + 6 + 7
target : 16 = 1 + 2 + 6 + 7
target : 17 = 1 + 1 + 2 + 6 + 7
target : 18 = 2 + 3 + 6 + 7
target : 19 = 1 + 2 + 3 + 6 + 7
target : 20 = 1 + 1 + 2 + 3 + 6 + 7
target : 21 = X
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = Number(input[0]);
const weights = input[1].split(' ').map(Number).sort((a, b) => a - b);
let target = 1;
for (let i = 0; i < N; i++) {
if (weights[i] <= target) {
target += weights[i];
} else {
break;
}
}
console.log(target);