[백준] 기타줄 1049번 - Java

GoshK·2022년 2월 17일
0

[백준] Java

목록 보기
40/49
post-thumbnail

[백준] 기타줄 1049번

나의 풀이

public class GuitarStrings {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] items = br.readLine().split(" ");
        int N = Integer.parseInt(items[0]);
        int M = Integer.parseInt(items[1]);

        int minP = 1001, minS = 1001;
        for(int i = 0; i < M; i++) {
            int[] prices = Arrays.stream(br.readLine()
                    .split(" ")).mapToInt(Integer::parseInt).toArray();
            int p = prices[0], s = prices[1];
            minP = Math.min(p, minP);
            minS = Math.min(s, minS);
        }

        int quantity = 6;
        int planA = (minP * (int)Math.ceil(N / (float)quantity)); //올 패키지
        int planB = N * minS; //올 낱개
        int planC = (minP * (N / quantity)) + ((N % quantity) * minS); //패키지 + 낱개
        
        int answer = (int)Math.min(Math.min(planA, planB), planC);
        System.out.println(answer);
    }
}
  • 라인 상관없이 패키지와 낱개의 가격 중 각 가격의 최솟값을 구해서 모두 패키지로 살 경우, 모두 낱개로 살 경우, 낱개와 패키지로 살 경우의 가격을 각각 구해서 세 가지 케이스 중 다시 최솟값을 구하는 방식으로 접근하였다.
  • 먼저 반복을 돌면서 입력받은 패키지의 가격과 낱개의 가격의 최솟값을 구해준다. 입력 값은 1000이 최댓값이기 때문에 비교를 위해 1001로 설정하였다.
  • 패키지와 낱개의 최소가격이 구해졌으면 각 상황에 맞게 계산을 해주면 된다.
  • 단, 패키지로만 살 경우 Math.ceil 과 float을 써야한다. 만약 사용하지 않으면 패키지의 갯수는 6개인데 필요한 기타줄이 6개보다 작다면 0을 반환하게 될 것이다. 기타줄의 개수가 적더라도 패키지 하나를 살 경우가 더 이득일 수도 있기 때문에 최소 패키지의 구입 개수를 1은 반환하게 해야 한다.
  • 구해진 케이스들을 중 Math.min을 사용하여 최솟값을 구해서 출력한다.

0개의 댓글