노래 당 용량이 l일 때, n개의 노래를 용량 c인 cd에 넣는다. cd안에서 노래간의 간격이 1 이상이여야하고 cd안의 노래 갯수는 13으로 나누어 떨어지면 안되는데 이러면 필요한 cd의 갯수를 구하는 문제이다.
먼저 cd 당 노래 갯수를 구한다. cd 사이에 1칸의 공백이 필요하므로 c/(l+1)이 되며, c%(l+1)이 l 이면 맨 끝에 노래 하나를 더 넣을 수 있다. 또한 cd 당 노래 갯수가 13으로 나누어 떨어지면 1개 덜 넣는다.
int amount = c / (l + 1);
if ((c % (l + 1)) == l) {
amount++;
}
if (amount % 13 == 0) {
amount--;
}
이후, 필요한 cd 갯수를 구한다. 노래의 수를 amount로 나누어 준 후, 나머지가 0이 아니면 더 필요하므로 추가한다. 나머지 노래의 갯수가 13으로 나누어 떨어지면 앞에 cd가 없거나, 나머지가 amount -1이라면 앞의 cd의 노래를 하나 더 넣어서 더 추가할 수 없으므로 cd가 하나 더 필요하다. 아니라면 필요 없다.
int answer = n / amount;
int rest = n % amount;
if (rest == 0) {
System.out.print(answer);
} else {
answer++;
if (rest % 13 == 0) {
if (answer == 1 || rest == amount - 1) {
answer++;
}
}
System.out.print(answer);
}
결과 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class 새앨범1424 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int l = Integer.parseInt(br.readLine()), c = Integer.parseInt(br.readLine());
br.close();
int amount = c / (l + 1);
if ((c % (l + 1)) == l) {
amount++;
}
if (amount % 13 == 0) {
amount--;
}
int answer = n / amount;
int rest = n % amount;
if (rest == 0) {
System.out.print(answer);
} else {
answer++;
if (rest % 13 == 0) {
if (answer == 1 || rest == amount - 1) {
answer++;
}
}
System.out.print(answer);
}
}
}
'알고리즘(백준 등) 공부 > 백준(자바)' 카테고리의 다른 글
| 백준 1437번: 수 분해 (0) | 2026.04.27 |
|---|---|
| 백준 1427번: 소트인사이드 (0) | 2026.04.26 |
| 백준 1431번: 시리얼 번호 (1) | 2026.04.25 |
| 백준 1430번: 공격 (0) | 2026.04.25 |
| 백준 1421번: 나무꾼 이다솜 (0) | 2026.04.24 |