백준 온라인 저널, 그리디 알고리즘/1789번 : 수들의 합(파이썬)
2021. 6. 12. 22:29ㆍ알고리즘/그리디
728x90
반응형
문제 정의
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.
예제 입력 1
200
예제 출력 1
19
- 최대한 많은 자연수를 사용해 S를 만들기 위해선 서로 다른 자연수들이 최소가 되어야한다.
1+2+3+4 = 10이다.
1+2+3+5 = 11이다.
1+2+4+5 = 12이다.
1+3+4+5 = 13이다.
2+3+4+5 = 14이다.
1+2+3+4+5 = 15이다.
=> 따라서 i가 1부터 N까지일 때 ∑K = X인 경우에, K는 X <= S <= X+1의 조건을 만족할 때 구할 수 있다는 것을 알 수 있다.
(위의 식이 성립하는 이유는 ∑K = X에 대한 N이 0부터 N까지의 차이가 모두 1이기 때문에 자연수에 한해서 위의 식은 성립한다.)
접근 방법
1. 주어진 S보다 작아질 때까지 숫자를 하나씩 더하다가 S보다 작으면 (N-1)을 출력한다.
코드
s = int(input())
total = 0
count = 0
while True:
count += 1
total += count
if total > s:
break
print(count-1)
728x90
반응형
'알고리즘 > 그리디' 카테고리의 다른 글
백준 온라인 저널, 그리디 알고리즘/1744번 : 수 묶기(파이썬) / 백준 골드 문제 (0) | 2021.06.13 |
---|---|
백준 온라인 저널, 그리디 알고리즘, 자료 구조, 우선순위 큐/1715번 : 카드 정렬하기(파이썬) / 골드 문제 (0) | 2021.06.12 |
이코테 2021, 그리디 알고리즘 / 곱하기 혹은 더하기 (파이썬) (0) | 2021.06.11 |
백준 온라인 저널, 그리디 알고리즘/2217번, 로프(파이썬) (0) | 2021.06.10 |
백준 온라인 저널, 그리디 알고리즘/2437번 : 저울(파이썬) (0) | 2021.06.10 |