Search
Duplicate
📗

과자 나눠주기

주차
문제번호
16401
언어
티어
실버
유형
이분탐색
nj_Blog
nj_상태
이해도
100%
풀이
사람
이해도 2
13 more properties

문제접근

놓쳤던 부분

Mid 를 이용하여 나눗셈 연산을 하다보니 0인 경우에 대해서 예외처리를 해줘야 한다

코드

5828 KB

236 ms

#include <iostream> #include <vector> #include <algorithm> int m, n; std::vector<int> snack; int answer = 0; void input_setting() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); } void input() { std::cin >> m >> n; snack.resize(n); for (int i = 0; i < n; i++) std::cin >> snack[i]; } void solution() { std::sort(snack.begin(), snack.end()); int start = 0; int end = snack[n - 1]; while (start <= end) { int count = 0; int mid = (start + end) / 2; if (mid == 0) return ; for (int i = 0; i < n; i++) if (snack[i] >= mid) count += snack[i] / mid; if (count >= m) { answer = mid; start = mid + 1; } else end = mid - 1; } } void print() { std::cout << answer; } int main(void) { input_setting(); input(); solution(); print(); return (0); }
C++
복사