예선 1번.
이게 난 2번보다 빡셌던거같은데...?
바구니에 나눠 담지 못하는 경우는
차이가 전부 1임에도 불구하고 공이 부족한 경우이다.
즉 계단모양으로 배열하면 되고,
공의 갯수가 계단모양의 넓이보다 작으면 -1을 출력해주면 된다.
이제 계단모양으로 일단 공을 배열해놓고,
계단의 가장 윗층부터 공을 올려놓으면서
한계단씩 내려오는게
공의 개수차이를 가장 작게 하는 배치 방법이다.
그대로 구현만 해주면 AC.
더보기
#include <stdio.h>
int arr[1234] = {0};
int main(){
int n,k;
scanf("%d %d", &n, &k);
if(n < k*(k+1)/2){ printf("-1"); return 0; }
for(int i=1; i<=k; i++){ arr[i] = i; n-=i; }
int ptr=k;
while(n){
arr[ptr]++;
ptr--;
n--;
if(ptr==0) ptr = k;
}
printf("%d", arr[k]-arr[1]);
return 0;
}
반응형