19939번 박 터뜨리기
난이도
- 실버 5
알고리즘 분류
- 그리디 알고리즘
풀이
각 바구니에는 1개 이상의 공이 존재해야한다.
각 바구니에 들어있는 공의 개수는 모두 달라야 한다.
바구니에 담긴 공의 최대 개수와 최소 개수의 차이를 최소로 하기 위해선 1개 씩 증가하면서 담기
1개씩 증가하면서 담을 수 없는 경우, 공의 개수를 달리하면서 모든 바구니를 채울 수 없다.
1개씩 증가하면서 담을 수 있는 경우,
공을 다 담은 경우 종료
공이 바구니의 개수보다 많이 남은 경우, 각 바구니에 1개 씩 추가
공이 바구니의 개수보다 적게 남은 경우, 공이 많이 담긴 바구니부터 1개씩 추가해야 겹치지 않는다.
코드
public class Main {
public static void main(String[] args) throws Exception {
// System.setIn(new FileInputStream("input.txt"));
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(in.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int answer = -1;
int sum = 0;
int[] balls = new int[K];
boolean check = true;
for (int i = 0; i < K; i++) {
sum += i + 1;
balls[i] = i + 1;
if (sum > N) {
check = false;
break;
}
}
while (check) {
if (N - sum == 0) {
answer = balls[K - 1] - balls[0];
break;
}
if (N - sum < K) {
answer = balls[K - 1] - balls[0] + 1;
break;
}
if (N - sum >= K) {
for (int i = 0; i < K; i++) {
balls[i] = balls[i] + 1;
}
sum += K;
}
}
// System.out.println(Arrays.toString(balls));
sb.append(answer);
out.write(sb.toString());
out.close();
}
}
'Coding Test > Baekjoon' 카테고리의 다른 글
백준 2922번 크면서 작은 수 (JAVA) (0) | 2022.09.21 |
---|---|
백준 1722번 순열의 순서 (JAVA) (0) | 2022.09.12 |
백준 1251번 단어 나누기 (JAVA) (0) | 2022.09.12 |
백준 1326번 폴짝폴짝(Java) (0) | 2022.09.06 |
백준 1931번 회의실 배정 (0) | 2022.07.27 |