승택이는 강을 건너려 한다.
승택이는 수영을 못하기 때문에, 강에 놓인 징검다리를 밟고 건너갈 것이다.
승택이는 수영은 못하지만 제자리뛰기는 정말 잘한다. 원하는 어느 곳으로든지 점프해서 바로 갈 수가 있다.
승택이는 이제 강의 한쪽 변 앞에 서 있다.
강엔 1번부터 시작해 2번, 3번, ... , N번 징검다리가 차례대로 놓여 있다.
강의 폭이 넓은 탓에 징검다리의 수는 엄청나게 많다.
이 징검다리를 모두 밟고 싶지는 않았던 승택이는 제자리뛰기 실력을 발휘해 적절한 개수의 징검다리만을 밟고 가기로 했다.
물론 강 건너편으로 바로 점프하는 것도 가능하지만, 더 재미있게 강을 건너기 위해 승택이는 다음과 같은 규칙을 정했다.
[조건사항]
첫 징검다리는 점프해서 아무 것이나 밟을 수 있다. 이 점프가 첫 점프이다.
두 번째 점프부터는 이전에 점프한 거리보다 1 이상 더 긴 거리를 뛰어야만 한다.
N번 징검다리는 반드시 밟아야 한다.
N번 징검다리를 밟은 후 강 건너로 이동할 땐 점프를 하지 않으므로 위의 규칙이 적용되지 않는다.
승택이가 위의 규칙을 지키며 강을 건널 때, 밟을 수 있는 징검다리의 최대 수는 몇 개일까?가 주어졌을 때, 형택이가 게임을 최소 몇 번 더 해야 Z가 변하는지 구하는 프로그램을 작성하시오.
그래도 1일차에서 공부했던 이분탐색 덕분에 문제에 접근하는 것이 쉽게 느껴졌다
mid를 가지고 등차수열 식을 이용해서 코드를 작성해주면 되는 코드였다
t = int(input())
for _ in range(t):
n = int(input())
start = 1
end = n
result = 0
while start <= end:
mid = (start + end) // 2
if ((mid + 1) * mid) // 2 <= n:
start = mid + 1
result = mid
else:
end = mid - 1
print(result)
일정한 차이로 증가하거나 감소하는 수열이다. 가장 일반적인 형태로, 처음 항이 1이고 공차가 1인 수열을 고려할 수 있다
(mid + 1) * mid // 2 <= n
항해 99에서 비록 이제 2일차지만, 내가 문제를 풀수 있다는 사실이 좀 놀라운 것 같다. 차근차근 문제를 해석하고 풀어나가는 과정에서 조금씩 흥미를 느끼고 있는 것 같다.
등차수열을 너무 오랜만에 봐서 살짝 멈칫하긴 했지만, 이렇게 하나하나 공부하다보면 더 발전할 수 있다는 생각에 기대가 된다.