Thief of Wealth

1. 문제

서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?

2. 입력

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

3. 출력

첫째 줄에 자연수 N의 최댓값을 출력한다.

 

핵심 아이디어 

서로다른 n개의 수를 합쳤더니 s가 되었고, s가 주어진다.

이때 최대 n을 구하면 되는데,

최대 n을 만드려면 최대한 작은 수를 여러번 사용하기만 하면된다.

하지만 서로 다른 자연수여야 하므로,

1부터 1씩 증가해가며 더해주다가 s가 넘어가는 시점에 멈추고 1을 빼주면된다.

 

예를 들어서 s=200일때

1부터 20까지 차례로 더해보면

1

3
6
10
15
21
28
36
45
55
66
78
91
105
120
136
153
171
190
210

 

순으로 증가함을 알 수 있다.

이때, 완벽하게 200을 만들 수 는 없지만, 

숫자를 살짝 바꿔 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21 등)

으로 바꾼다면 19개로 200을 만들 수 있다.

 

우리의 목표는 개수를 구하는 것이므로 저렇게 자세한 숫자의 값은 구하지 않아도 된다!

 

<javascript />
'use strict' const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const solution = function (input) { const s = parseInt(input[0]); let curr = 1; let sum = curr; while (sum <= s) { curr++; sum += curr; console.log(sum); } console.log(curr - 1); }; const input = []; rl.on("line", function (line) { input.push(line); }).on("close", function () { solution(input); process.exit(); });

 

한번 누르면 2시간동안 보이지 않아요 ㅎㅎ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
원치 않을 경우 를 눌러주세요