본문 바로가기

알고리즘/🥈 실버

백준 1049 기타줄 자바 풀이

728x90

난이도 : 실버4

풀이일 : 07204

https://www.acmicpc.net/problem/1049

 

1049번: 기타줄

첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐

예제는 링크를 따라가시면 세 가지가 더 있습니다.


풀이 코드

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        int N = scan.nextInt();
        int M = scan.nextInt();

        // 6개, 1개 최소값
        int mini_six = N*N*N;
        int mini_one = N*N*N;

        // 판매단위별 최소값 저장
        for (int i = 0; i < M; i++) {
            int six = scan.nextInt();
            if (six < mini_six) {
                mini_six = six;
            }
            int one = scan.nextInt();
            if (one < mini_one) {
                mini_one = one;
            }
        }
        // 한 개씩 살때가 더 쌀 경우
        if (mini_one*6 < mini_six) {
            System.out.println(mini_one*N);
        }
        // 여섯개 묶음이 더 쌀 경우
        else {
            // 줄 개수 맞춰 사는게 더 쌀 경우
            if (N/6*mini_six+N%6*mini_one < (N/6+1)*mini_six)
            System.out.println(N/6*mini_six+N%6*mini_one);
            // 줄 개수 남기는게 더 쌀 경우
            else {
                System.out.println((N/6+1)*mini_six);
            }
        }
    }
}
  • 6개, 1개 단위 구매가 중 최저가 저장
  • 1개 구매가 싸다면 1개 단위 최저가 * 필요한 줄의 개수 출력
  • 6개 구매가 더 싸다면
    • 6개 구매로 줄을 남기는 경우, 아닌 경우 비교 후 작은 값 출력

느낀점

막상 풀면 오래 걸리지 않는데 자꾸 알고리즘을 건너뛰게 된다.

매일매일 꾸준히 풀자