알고리즘 연습/그리디 알고리즘

[🥈5 / 백준 1789 / 파이썬] 수들의 합

김세진 2021. 9. 21. 17:16
반응형

 

 

1789번: 수들의 합

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

www.acmicpc.net

 

문제

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

입력

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

출력

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

 

예제 입력 

200

예제 출력 

19

 

풀이

 

서로 다른 자연수의 합 S가 주어질 때, 자연수의 개수가 최대가 되는 방법은 무엇일까?

바로 1부터 더해나가는 것이다.

 

1부터 쭉 더해나가다가 S를 초과할 때, 마지막 숫자를  제거한 뒤 그 다음 숫자를 적절히 수정하면 S가 만들어진다.

 

S = 11을 예로 들어보겠다.1+2+3+4+5 = 15로 S를 초과했다.5를 제거한 뒤 4를 5로 수정하면 1+2+3+5 = 11이 만들어진다.

 

하지만 위 과정은 굳이 계산해줄 필요는 없다. 1부터 더해나가면서 더한 횟수를 카운트하고, 초과한다면 횟수를 출력하자.

 

n = int(input())
r,i = 0,1
while(r < n):
    i += 1
    r += i
print(i-1)
반응형