728x90
난이도 : 실버2
해결 과정 :
이분 탐색으로 푸는 문제 였습니다.
나눠줄 때 한 색깔종류로만 나눠줘야 하기 때문에
각 색상의 개수 / 질투심 값과 나눴을 때 나머지가 나온다면 +1 해서 각각 더해진 cnt 값이
학생의 수와 같으면 right 값을 줄여주는 식으로 구현 하였습니다.
맨 첨에 left값을 0으로했다가 100퍼에서 틀렸다고 나오길래 1로 고쳐줬습니다.
코드 :
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, m, v[300005], ans;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> v[i];
}
sort(v, v+m);
int l = 1, r = v[m - 1];
while (l<=r) {
int mid = (l + r) / 2;
int cnt = 0;
for (int i = 0; i < m; i++) {
cnt += v[i] / mid;
if (v[i] % mid != 0) cnt++;
}
if (cnt <= n) {
r = mid - 1;
ans = mid;
}
else {
l = mid + 1;
}
}
cout << ans;
}
728x90
'Algorithm > Solution' 카테고리의 다른 글
[백준] 4179 불!(C++) (2) | 2022.09.30 |
---|---|
[백준] 1406 에디터(C++) (0) | 2022.09.20 |
[백준] 14503 로봇 청소기 (C++) (0) | 2022.08.17 |
[백준] 15686 치킨 배달(C++) (0) | 2022.07.28 |
[백준] 2623 음악 프로그램(C++) (0) | 2022.07.15 |