본문 바로가기

알고리즘(백준 등) 공부/백준(자바)

백준 1424번: 새 앨범

노래 당 용량이 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);
        }
    }
}