문제접근
•
처음에 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++
복사