PS
[BOJ] Python 백준 징검다리(11561)
1223v
2024. 10. 29. 14:54
https://www.acmicpc.net/problem/11561
기본적인 조건인 최대한 많은 징검다리를 밟는다는 것은 최소한 짧게 뛰어야 많이 밟게 됌
즉, 1 + 2 + 3 + 4 + 5 + 6 .... + N 이런식으로 뛰어야 최대로 밟게된다.
위 공식은 등차 수열이므로
SUM = N(N+1) // 2로 정리할 수 있다.
즉, 결과 값인 SUM이 N을 넘지 않는 선에서 제일 가까운 SUM 값에 대한 middle이 최대로 밟을 수 있는 값이다.
import sys
input = sys.stdin.readline
T = int(input())
for _ in range(T):
N = int(input())
result = 0
start = 0
end = N
while start <= end:
middle = int((start + end) / 2)
if int((middle*(middle+1))/2) <= N: # 등차수열 합 공식
start = middle + 1
result = middle
else:
end = middle - 1
print(result)