Python으로 구현한 19939번 박 터뜨리기 문제 풀이입니다.
https://www.acmicpc.net/problem/19939
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를 그대로 출력한다.
'백준(Python) 풀이 > 그리디 알고리즘' 카테고리의 다른 글
백준(Python) 17521번 Byte Coin 풀이 (0) | 2021.12.14 |
---|---|
백준(Python) 1417번 국회의원 선거 풀이 (0) | 2021.12.14 |
백준(Python) 16435번 스네이크버드 풀이 (0) | 2021.12.14 |
백준(Python) 9237번 이장님 초대 풀이 (0) | 2021.12.14 |
백준(Python) 1343번 폴리오미노 풀이 (0) | 2021.12.13 |