[ ๐—•๐—ข๐— ] 2437๋ฒˆ ์ €์šธ - ๊ทธ๋ฆฌ๋”” | JavaScript

NewHaยท2025๋…„ 5์›” 2์ผ
0
post-thumbnail

๐ŸŽฏ ๋ฌธ์ œ ์„ค๋ช…

๐Ÿงฉ ๋ฐฑ์ค€ 2437๋ฒˆ - ์ €์šธ | ๊ณจ๋“œ2

ํ•˜๋‚˜์˜ ์–‘ํŒ” ์ €์šธ์„ ์ด์šฉํ•˜์—ฌ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ๋ฅผ ์ธก์ •ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ด ์ €์šธ์˜ ์–‘ ํŒ”์˜ ๋์—๋Š” ๋ฌผ๊ฑด์ด๋‚˜ ์ถ”๋ฅผ ์˜ฌ๋ ค๋†“๋Š” ์ ‘์‹œ๊ฐ€ ๋‹ฌ๋ ค ์žˆ๊ณ , ์–‘ํŒ”์˜ ๊ธธ์ด๋Š” ๊ฐ™๋‹ค. ๋˜ํ•œ, ์ €์šธ์˜ ํ•œ์ชฝ์—๋Š” ์ €์šธ์ถ”๋“ค๋งŒ ๋†“์„ ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ์ชฝ์—๋Š” ๋ฌด๊ฒŒ๋ฅผ ์ธก์ •ํ•˜๋ ค๋Š” ๋ฌผ๊ฑด๋งŒ ์˜ฌ๋ ค๋†“์„ ์ˆ˜ ์žˆ๋‹ค.

๋ฌด๊ฒŒ๊ฐ€ ์–‘์˜ ์ •์ˆ˜์ธ N๊ฐœ์˜ ์ €์šธ์ถ”๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ด ์ถ”๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธก์ •ํ•  ์ˆ˜ ์—†๋Š” ์–‘์˜ ์ •์ˆ˜ ๋ฌด๊ฒŒ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌด๊ฒŒ๊ฐ€ ๊ฐ๊ฐ 3, 1, 6, 2, 7, 30, 1์ธ 7๊ฐœ์˜ ์ €์šธ์ถ”๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ถ”๋“ค๋กœ ์ธก์ •ํ•  ์ˆ˜ ์—†๋Š” ์–‘์˜ ์ •์ˆ˜ ๋ฌด๊ฒŒ ์ค‘ ์ตœ์†Ÿ๊ฐ’์€ 21์ด๋‹ค.

์ž…๋ ฅ

  • ์ฒซ์งธ ์ค„: 1 โ‰ค ์ €์šธ์ถ”์˜ ๊ฐœ์ˆ˜ N โ‰ค 1,000
  • ๋‘˜์งธ ์ค„: N๊ฐœ์˜ ์ €์šธ ์ถ”์˜ ๋ฌด๊ฒŒ
    • 1 โ‰ค ๊ฐ ์ถ”์˜ ๋ฌด๊ฒŒ โ‰ค 1,000,000
7
3 1 6 2 7 30 1

์ถœ๋ ฅ

์ฃผ์–ด์ง„ ์ถ”๋“ค๋กœ ์ธก์ •ํ•  ์ˆ˜ ์—†๋Š” ์–‘์˜ ์ •์ˆ˜ ๋ฌด๊ฒŒ ์ค‘ ์ตœ์†Œ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

21

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๋ฌธ์ œ ํ’€์ด

  1. ๋ฌธ์ œ๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ

ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ถ”๋ฅผ ์„ ํƒํ•˜๋ฉด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ์˜ ๋ฒ”์œ„๋ฅผ ํ™•์žฅํ•ด ๋‚˜๊ฐ€๋Š” ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฌด๊ฒŒ๋ฅผ ์ตœ๋Œ€ํ•œ ๋งŒ๋“ค์–ด๋ด…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ํ˜„์žฌ ์ถ”๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ์ฒซ๋ฒˆ์งธ ๋ฌด๊ฒŒ๊ฐ€ ๋‚˜์˜ค๋ฉด ๊ทธ๊ฒŒ ๋‹ต์ด ๋ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ์„ ์„ ํƒ

๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ์ถ”๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์„ ํƒํ•˜๋Š” ๊ฒŒ, ๊ฐ€์žฅ ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์ž‘์€ ๋ฌด๊ฒŒ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ธก์ • ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋ฅผ ์ ์  ๋„“ํ˜€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ์„  ์ถ”๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ์ค๋‹ˆ๋‹ค.

const weights = [3, 1, 6, 2, 7, 30, 1].sort((a, b) => a - b);
// [1, 1, 2, 3, 6, 7, 30] ์ด๋ ‡๊ฒŒ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
  1. ์„ ํƒ์„ ํ™•์ •ํ•˜๊ณ  ์ง„ํ–‰

๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌด๊ฒŒ์˜ ๋ฒ”์œ„๋ฅผ target ์ด๋ผ๊ณ  ํ•˜๋ฉด, ์ฒ˜์Œ์—๋Š” 1 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ˜„์žฌ๊นŒ์ง€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋Š” 1 ~ (target - 1) ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ถ”target์ƒˆ target
11 โ‰ฆ 1 (โœ…)11 + 1 = 2
11 โ‰ฆ 2 (โœ…)22 + 1 = 3
22 โ‰ฆ 3 (โœ…)33 + 2 = 5
33 โ‰ฆ 5 (โœ…)55 + 3 = 8
66 โ‰ฆ 8 (โœ…)88 + 6 = 14
77 โ‰ฆ 14 (โœ…)1414 + 7 = 21

์—ฌ๊ธฐ๊นŒ์ง€ ํ–ˆ์„ ๋•Œ, 1 ๋ถ€ํ„ฐ 20๊นŒ์ง€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒ๋‹ˆ๋‹ค.

  1. ๋ฐ˜๋ณต ์ข…๋ฃŒ

์–ด๋–ค ์ถ”์˜ ๋ฌด๊ฒŒ๊ฐ€ target๋ณด๋‹ค ํฌ๋ฉด, ๊ทธ ์ˆœ๊ฐ„์ด target ๋ฌด๊ฒŒ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์ด๊ณ  ๋‹ต์ด ๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ถ”target์ƒˆ target
3030 > 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);
profile
๋ฐฑ ๋ฒˆ์„ ๋ณด๋ฉด ํ•œ ๊ฐ€์ง€๋Š” ์•ˆ๋‹ค ๐Ÿ‘€

0๊ฐœ์˜ ๋Œ“๊ธ€