※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 20917번 문제인 흩날리는 시험지 속에서 내 평점이 느껴진거야이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/17951
어떤 고정된 값 \(x\)이 주어질 때 시험지를 \(x\)점 이상의 \(K\)개 그룹으로 나눌 수 있는지 판단하는 것은 그리디한 접근으로 어렵지 않게 해낼 수 있다. 또한 \(x\)의 값이 커질 때 그룹으로 나눌 수 없었다가 나눌 수 있게 되는 경우는 일어날 수 없으며, 마찬가지로 \(x\)의 값이 작아질 때 그룹으로 나눌 수 있었다가 나눌 수 없게 되는 경우는 일어날 수 없다는 점을 관찰할 수 있다.
위의 관찰을 이용하면 문제에서 구하고자하는 점수는 이분탐색을 통해 얻을 수 있음을 알 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N, K;
int A[100000];
int L = 0, R = 2000000;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> K;
for (int i = 0; i < N; i++) cin >> A[i];
while (L < R) {
int mid = (L + R) / 2 + 1;
int cnt = 0, val = 0;
for (int i = 0; i < N; i++) {
val += A[i];
if (val >= mid) cnt++, val = 0;
}
if (cnt < K) R = mid - 1;
else L = mid;
}
cout << L;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 30847 // C++] Нечетный ним (1) | 2024.06.11 |
---|---|
[BOJ 23921 // C++] Kick_Start (1) | 2024.06.10 |
[BOJ 1490 // C++] 자리수로 나누기 (1) | 2024.06.08 |
[BOJ 20917 // C++] 사회적 거리 두기 (0) | 2024.06.07 |
[BOJ 30050 // C++] 트리와 쿼리 \(10^9\) (0) | 2024.06.06 |