https://www.acmicpc.net/problem/1789
문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.
백준 1789 수들의 합 문제입니다.
처음에 그냥 i += 1 이렇게 접근했더니 시간초과가 떠서..
n(n+1)/2 < input(N)에서 n의 최댓값을 구하는 방법으로 접근했습니다.
수식을 정리하면\[n\le{\sqrt{2N +\frac{1}{4}}}-\frac{1}{2}\] 인 n의 최댓값을 구해야 합니다.
그래서 위 수식을 구한다음 내림으로 처리해서 풀었습니다.
import sys
import math
N = int(sys.stdin.readline())
result = math.floor((2*N+1/4)**0.5-1/2)
print(result)
'백준 알고리즘' 카테고리의 다른 글
파이썬) 백준 알고리즘 | 1543번 : 문자검색 (0) | 2022.01.27 |
---|---|
파이썬) 백준 알고리즘 | 1439번 : 뒤집기 (0) | 2022.01.27 |
파이썬) 백준 알고리즘 | 10610번 : 30 (0) | 2022.01.27 |
파이썬) 백준 알고리즘 | 2217번 : 로프 (0) | 2022.01.27 |
파이썬) 백준 알고리즘 | 1026번 : 보물 (0) | 2022.01.27 |
댓글