반응형
1. 문제
https://www.acmicpc.net/problem/1654
2. 풀이
이 문제는 답을 이분탐색을 이용하여 구하는 문제이다.
답은 1부터 2^31 - 1사이에 존재한다.
따라서 이 사이의 값 중 답이 되는 값중에 최댓값을 구하기 위해 이분탐색을 사용하면 된다.
또 다른 주의할점은
이분탐색을 할때 mid값을 구할때 m = (l + r) / 2인데
l이 1이고, r이 2^31 - 1이어서 더하게 되면 int형 사이즈를 초과하기때문에
l, r, m을 long long 형으로 변환시켜줘야한다.
3. 소스코드
#include <iostream>
#include <climits>
using namespace std;
int n, k, arr[10000];
bool makeN(int m) {
int line = 0;
for (int i = 0; i < k; i++) line += arr[i] / m;
if (line >= n) return true;
else return false;
}
int main() {
ios::sync_with_stdio(0);
cin >> k >> n;
for (int i = 0; i < k; i++) cin >> arr[i];
long long l = 1, r = INT_MAX, m;
while (l <= r) {
m = (l + r) / 2;
if (makeN(m)) l = m + 1;
else r = m - 1;
}
cout << r;
}
4. 참고
질문, 고칠점 등 댓글 언제나 환영입니다.
반응형
'백준 > 일반 문제' 카테고리의 다른 글
[백준/BOJ] 2579 - 계단 오르기 (c++) (DP) (0) | 2022.04.10 |
---|---|
[백준/BOJ] 1932 - 정수 삼각형 (c++) (DP) (0) | 2022.04.10 |
[백준/BOJ] 9461 - 파도반 수열 (c++) (DP) (0) | 2022.04.10 |
[백준/BOJ] 2156 - 포도주 시식 (c++) (DP) (0) | 2022.04.10 |
[백준/BOJ] 10844 - 쉬운 계단 수 (c++) (DP) (2) | 2022.04.09 |