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



