반응형
https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
해결 방법 : 이분탐색
- 만약 N이 sum(range(n)) <= N < sum(range(n+1))을 만족한다면, 답은 n이다.
- ex. N은 14이면 sum(range(4))가 10, sum(range(5))는 15 이므로 위를 만족하는 n은 4인데, 이 때 range(4) = [1,2,3,4]에서 마지막 자연수 '4'대신 N과 sum의 차이인 '4'만큼 더 큰 자연수 '8'을 포함시키는것이 최선일 것이다.
- 물론 sum(range()) 가 아닌, 등차수열 합 공식을 사용!
import sys
input = sys.stdin.readline
def solution(N):
mn, mx = 1, 1000000
while mn < mx - 1:
mid = (mn + mx) // 2
if (mid * (mid + 1)) / 2 <= N:
mn = mid
else:
mx = mid
return mn
if __name__ == '__main__':
N = int(input())
result = solution(N)
print(result)
반응형
'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글
백준 18352 : 특정 거리의 도시 찾기 (0) | 2021.06.18 |
---|---|
백준 3079 : 입국심사 (0) | 2021.06.18 |
백준 21608 : 상어 초등학교 (0) | 2021.06.13 |
백준 11728 : 배열 합치기(feat. Tim sort) (0) | 2021.06.09 |
백준 14916 : 거스름돈 (0) | 2021.06.09 |