백준(Python) 풀이/그리디 알고리즘

백준(Python) 19939번 박 터뜨리기 풀이

개발윗미 2021. 12. 14. 10:24

Python으로 구현한 19939번 박 터뜨리기 문제 풀이입니다.

 

https://www.acmicpc.net/problem/19939

 

19939번: 박 터뜨리기

$N$개의 공을 $K$개의 바구니에 문제의 규칙을 만족하면서 나눠 담을 수 있다면, 가장 많이 담긴 바구니와 가장 적게 담긴 바구니의 공의 개수 차이를 출력한다. 나눠 담을 수 없는 경우에는 -1을

www.acmicpc.net


n, k = map(int, input().split())

if n < k * (k + 1) // 2 :
  print(-1)
else :
  data = n - k * (k + 1) // 2 
  if data % k == 0 :
    print(k - 1)
  else :
    print(k)

 

1. 한 바구니에 가장 적게 담겨있는 공이 1개라고 할 때, 공을 1개씩 추가로 담으면서 마지막 바구니에는 k개의 공이 담겨야 한다.

 

   이 때 총 공의 개수는 공차가 1인 등차수열의 합과 동일하다.

 

2. 등차수열의 합과 입력받은 공의 개수(n) 값을 비교하여 n이 더 작다면 -1을 출력한다.

 

3. 그렇지 않다면 등차수열의 합을 k로 나누었을 때 나누어 떨어진다면 k - 1을 출력한다.

 

4. k로 나누었을 때 떨어지지 않는다면 k를 그대로 출력한다.