본문 바로가기
Algorithm/Greedy

[백준] 1789. 수들의 합 / 파이썬(python)

by Dev_Green 2022. 4. 24.

문제

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

입력

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

출력

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

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

 

1789번: 수들의 합

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

www.acmicpc.net


문제 파악

서로 다른 N개의 자연수를 합하여 S를 만들 때, 최대한의 N 값을 찾기 위해서는

1부터 시작하여 차례로 자연수들을 더하다가 S보다 커지는 지점을 찾으면 된다. 

그 지점 직전에 위치한 수가 곧 S를 구성할 수 있는 최대한의 갯수일 것이다.

 

예를 들어, S = 200일 때 

sum(1:19) = 190이고 sum(1:20) = 210이다. 

곧 N은 19인 것이다. 

1부터 18까지 합해주고 나머지 200에서 모자른 부분만큼을 19번 째 수로서 더해주면 된다. 

(1 + 2 + 3 + ... + 18) + 29

s = int(input())
n = 0
i = 1
while True:
    n += i
    if n > s:
        print(i-1)
        break
    else: 
        i += 1