알고리즘 연습/그리디 알고리즘
[🥈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)반응형