8주차 알고리즘 스터디 2

정재혁·2022년 3월 13일
0

백준1049번 문제

문제



문제 풀이

첫째줄은 끊어진 기타 수 + 브랜드 수를 입력받는다
두번째 줄 부터는 한묶음의 가격과 낱개의 가격을 입력받는다.

코드


package Baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main_1049 {
    public static void main(String[] argv) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int cost[][] =new int[M][2];
        int pay=0;

        for(int i = 0;i<M;i++){
            st = new StringTokenizer(br.readLine());
            cost[i][0]= Integer.parseInt(st.nextToken());
            cost[i][1]= Integer.parseInt(st.nextToken());
        }
        int min1 =cost[0][0];
        int min2 =cost[0][1];
        for(int i=1;i<M;i++){
            if(min1>cost[i][0]) min1 = cost[i][0];
            if(min2>cost[i][1]) min2 = cost[i][1];
        }
        if(N/6>=1){
            if(min1<=min2*6 && min1>=(N%6)*min2) pay = min1*(N/6) + min2*(N%6);
            else if(min1<=min2*6 && min1<(N%6)*min2) pay = min1*((N/6) + 1);
            else pay = min2*N;
        }
        else{
            if(min1<=min2*N) pay = min1;
            else pay =min2*N;
        }
        System.out.println(pay);
    }
}

해결방법.

  1. 각 가격들을 이차원배열에 각각 저장한다.
  2. 묶음 단위의 최소 가격과 낱개가격의 최소 가격을 구한다.
  3. 그 후 한 묶음 가격과 낱개 x 6의 가격을 비교해 n>=6 큰경우를 계산한다.
  4. n%6의 개수x 낱개가격과 묶음의 가격을 비교해 더 싼 값을 선택한다.
profile
저는 정재혁임니다^___^

0개의 댓글