본문 바로가기
백준

[백준] code.plus(브루트 포스 Part 1,JAVA)16917번, 양념 반 후라이드 반

by 열정적인 이찬형 2022. 8. 17.

문제 링크

 

16917번: 양념 반 후라이드 반

현진 치킨에서 판매하는 치킨은 양념 치킨, 후라이드 치킨, 반반 치킨으로 총 세 종류이다. 반반 치킨은 절반은 양념 치킨, 절반은 후라이드 치킨으로 이루어져있다. 양념 치킨 한 마리의 가격은

www.acmicpc.net


주의사항

  • JAVA를 사용하여 프로그램을 사용하였습니다.
  • 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{ 	
	public static void main(String[] args){
    }
}

문제 설명


접근 방법

 

이 문제에 핵심은

 

1. 양념 치킨 최소 X마리와 후라이드 치킨 최소 Y마리를 구매할 때 비용 최소값을 출력합니다.

 

알고리즘 진행 순서.

 

1. 입력되는 정보들을 저장합니다.

 

2. 입력된 값을 기준으로 점화식을 통해 최소 비용을 결과로 출력합니다.

 

 

점화식

 

1. X와 Y의 중 작은 값에 대한 양념과 후라이드를 구입합니다.

 

양념과 후라이드를 구입할 때에는 각각의 치킨을 사는 것과 반반 치킨을 사는 것의 가격을 고려한다.

 

(양념 + 후라이드) > 반반 치킨 × 2  : 양념 1개, 후라이드 1개 구입

(양념 + 후라이드) < 반반 치킨 × 2  : 반반 치킨 2개 구입

 

2. 1번으로 남은 큰 값에 치킨 개수를 구입합니다.

 

남은 큰 값에 치킨을 구입할 때 반반 치킨을 사는 것과 해당 치킨을 사는 것의 가격을 고려한다.

큰 값에 치킨 > 반반 치킨 × 2  : 큰 값에 치킨 1개 구입

큰 값에 치킨 < 반반 치킨 × 2  : 반반 치킨 2개 구입

 

예제입력 2.

 

1. 입력되는 정보들을 저장합니다.

 

후라이드 가격 : 1500

양념 가격 : 2000

반반 가격 : 1900

후라이드 최소 마리 : 3

양념 최소 마리 : 2

 

2. 입력된 값을 기준으로 점화식을 통해 최소 비용을 결과로 출력합니다.

 

1) X와 Y의 중 작은 값에 대한 양념과 후라이드를 구입합니다.

 

작은 값 양념의 개수 2개를 양념과 후라이드를 구입합니다.

 

(양념 + 후라이드) < 반반 치킨 × 2  : 반반 치킨 2개 구입

2000 + 1500 < 1900 × 2

3500 < 3800 : 양념 2마리, 후라이드 2마리 구입

1500 × 2 + 2000 × 2 = 7000

 

2) 1번으로 남은 큰 값에 치킨 개수를 구입합니다.

 

큰 값 : 후라이드 1마리(3-2)

후라이드 > 반반 치킨 × 2  : 큰 값에 치킨 1개 구입

 

1500 < 1900 × 2

1500 < 3800 : 후라이드 1마리 구입

1500 × 1 = 1500

 

결과 : 7000 + 1500 = 8500  

 

  • BufferedReader를 사용하여 입력 값을 받았습니다.
  • StringTokenizer를 통해서 입력된 값을 띄어쓰기 기준 나누었습니다.
  • 후라이드와 양념이 먹어야할 작은 값을 구합니다.
  • cal을 실행하여 최소 비용값을 BufferedWriter 저장하였습니다.
  • BufferedWriter에 저장된 결과값을 출력하였습니다.
  • cal함수는 점화식을 진행합니다.

 

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    static int A,B,C,X,Y;
    public static void main(String[] args) throws IOException {
        //입력값 처리하는 BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //결과값 출력하는 BufferedWriter
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        A = Integer.parseInt(st.nextToken());
        B = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());
        X = Integer.parseInt(st.nextToken());
        Y = Integer.parseInt(st.nextToken());
        int common;
        boolean check = false;
        //후라이드 X마리와 양념 Y마리의 작은값 구하기
        if(X>=Y){
            common = Y;
            check = true;
        }else
            common = X;
        //점화식 진행
        int answer = cal(common, check);
        bw.write(answer + "");	//결과 BufferedWriter 저장
        bw.flush();	//결과 출력
        bw.close();
        br.close();
    }
    //점화식 진행하는 함수
    static int cal(int common, boolean check){
        int result = 0;
        //1. X와 Y의 중 작은 값에 대한 양념과 후라이드를 구입합니다.
        if(A+B >= C * 2)
            result += (C*2) * common;
        else
            result += (A+B) * common;

        //2. 1번으로 남은 큰 값에 치킨 개수를 구입합니다.
        if(!check){
            int size = Y - common;
            if(B <= C*2)
                result += B * size;
            else
                result += (C*2) * size;
        }else{
            int size = X - common;
            if(A <= C*2)
                result += A * size;
            else
                result += (C*2) * size;
        }

        return result;
    }
}

댓글