반응형
문제
서로 다른 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)
반응형
'알고리즘 연습 > 그리디 알고리즘' 카테고리의 다른 글
[🥈1 / 백준 1946 / 파이썬] 신입 사원 (0) | 2021.10.01 |
---|---|
[🥉4 / 백준 10162 / 파이썬] 전자레인지 (0) | 2021.09.23 |
[🥈1 / 백준 16953 / 파이썬] A → B (0) | 2021.08.29 |
[🥉2 / 백준 5585 / 파이썬] 거스름돈 (0) | 2021.08.19 |
[🥈4 / 백준 13305 / 파이썬] 주유소 (0) | 2021.06.21 |