Search
Duplicate
📕

박 터뜨리기

주차
문제번호
19939
언어
C++
티어
실버
유형
수학
그리디
nj_Blog
nj_상태
이해도
33%
풀이
사람
이해도 2
13 more properties

문제접근

처음에 1 ~ k번째 사람에게 각자의 인덱스에 해당하는 수만큼 공을 가져감
그 공이
n을 초과할때
-1
n과 같을때
최대와 최소 차이 출력
n을 초과하지 않았을때
가장 마지막 인덱스 사람부터 공을 하나씩 나눠가짐

놓쳤던 부분

코드

2020 KB

0 ms

#include <iostream> #include <vector> using namespace std; int main(void) { int n, k; int total = 0; vector<int> bascket; ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> k; bascket.resize(k + 1); for (int i = 1; i <= k; i++) { bascket[i] = i; total += i; } if (total > n) cout << "-1"; else if (total == n) cout << bascket[k] - bascket[1]; else { int idx = k; int moreNeed = n - total; while (true) { bascket[idx--]++; moreNeed--; if (idx == 0) idx = k; if (moreNeed == 0) break ; } cout << bascket[k] - bascket[1]; } return (0); }
C++
복사