티스토리 뷰
문제링크 : https://www.acmicpc.net/problem/11561
11561번: 징검다리
각 테스트 케이스마다 한 줄에 승택이가 밟을 수 있는 최대 징검다리 수를 출력한다.
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
while(T--)
{
ll N, result = 0;
cin >> N;
ll l = 1, r = sqrt(N) * 2;
while(l<=r)
{
ll mid = (l+r)/2;
if (mid * (mid+1) <=2*N) // m(m+1)/2 <= N
{
result = max(result, mid);
l = mid + 1;
}
else r = mid - 1;
}
cout << result << "\n";
}
return 0;
}
이분탐색을 이용한 문제이다.
규칙을 보면, 1 + 2 + 3 + 4 + ....... (N-1) + N번으로 이는 등차수열이다.
따라서 m(m+1)/2로 표현이 가능하며 여기서 m이 mid 값이다.
해당 등차수열의 값이 N보다 작을 때의 최대값을 구하면 된다.
'백준 > 실버' 카테고리의 다른 글
| [백준 14562번] 태권왕 (C++) (0) | 2023.05.31 |
|---|---|
| [백준 12845번] 모두의 마블 (C++) (0) | 2023.05.30 |
| [백준 25192번] 인사성 밝은 곰곰이 (C++) (0) | 2023.05.26 |
| [백준 26266번] 비즈네르 암호 해독 (C++) (0) | 2023.05.24 |
| [백준 3495번] 아스키 도형 (C++) (0) | 2023.05.21 |