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)
'PS' 카테고리의 다른 글
[Progammers] Python 프로그래머스 모음사전(84512) (0) | 2024.11.03 |
---|---|
[BOJ] Python 백준 알고리즘 수업 - 너비 우선 탐색 1(24444) (0) | 2024.11.01 |
[BOJ] Python 백준 알고리즘 수업 - 깊이 우선 탐색 1(24479) (0) | 2024.10.31 |
[Progammers] Python 프로그래머스 입국심사(43238) (2) | 2024.10.30 |
[BOJ] Python 백준 게임(1072) (1) | 2024.10.28 |
댓글