백준 20363 당근 키우기 문제풀이 (JAVA)

문제 링크

문제


꽉꽉나라의 농부 오리는 당근을 키우려고 한다. 꽉꽉나라에서는 씨앗이 X만큼의 온기와 Y만큼의 수분을 가지면 당근으로 자란다고 한다.

씨앗은 햇빛을 1번 받을 때마다 1만큼의 온기가 증가하고, 햇빛을 10번 받을 때마다 1만큼의 수분이 감소한다.

씨앗은 물을 1번 받을 때마다 1만큼의 수분이 증가하고, 물을 10번 받을 때마다 1만큼의 온기가 감소한다.

만약, 감소되어야 하는 온기 혹은 수분이 이미 0이라면 감소되지 않는다. 즉, 온기와 수분은 음수가 되지 않는다. 맨 처음 씨앗의 온기와 수분은 0이다.

오리는 당근을 효율적으로 키우기 위해, 당근이 자랄 때까지 햇빛과 물을 주는 횟수의 합을 최소화하려고 한다. 예를 들어, X = 10, Y = 10이라고 하자.

씨앗에 햇빛을 10번 주면 온기 10, 수분 0이 된다. 그리고, 물을 10번 주면 온기 9. 수분 10이 된다. 마지막으로 햇빛을 1번 주면 온기 10, 수분 10으로 당근이 자라게 된다. 이때, 햇빛과 물을 준 횟수의 합은 21이고 위 예제에서의 최솟값이다.

X와 Y가 주어졌을 때, 당근이 자랄 때까지 햇빛과 물을 주는 횟수의 합의 최솟값을 구하는 프로그램을 작성하라.

입력


첫째 줄에 X와 Y (0 ≤ X, Y ≤ 109)를 의미하는 정수가 공백으로 구분되어 주어진다.

출력


당근이 자랄 때까지 햇빛과 물을 주는 횟수의 합의 최솟값을 나타내는 정수를 출력하라.

풀이


온기, 수분 둘 다 0 이하로는 떨어지지 않으므로, 최소가 되려면 하나가 0인 상태에서 또 다른 하나 먼저 값을 채운 다음 다른 하나를 채우고, 떨어진 값 만큼 다시 채우면 된다.
예를들어 온기 10 수분 10이 필요하면, 온기에 처음에 10 채운 후, 수분에 10을 채운다. 수분을 채우는 과정 중에 온기가 1 떨어졌으니 나머지 1을 채우면 된다.
온기를 먼저 채우는 경우, 수분을 먼저 채우는 경우 각각 구해서 최솟값을 출력하면 된다.

소스코드


import java.util.*;
import java.io.*;
public class Main{
    
    public static void main(String [] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());
        final int needSun = Integer.parseInt(st.nextToken());
        final int neddWater = Integer.parseInt(st.nextToken());
        int answer1 =  needSun + neddWater + neddWater/10;
        int answer2 =  needSun + neddWater + needSun/10;
        if(answer1 < answer2) {
            sb.append(answer1);
        }else {
            sb.append(answer2);
        }
        
        sb.append("\n"); 
        
        bw.write(sb.toString());
        
        bw.flush();
        br.close();
        bw.close();
        
    }

    
}

좋은 웹페이지 즐겨찾기