본문 바로가기
문제풀이/백준

[백준] 20363번 - 당근 키우기(JAVA)

by chan10 2021. 4. 20.

www.acmicpc.net/problem/20363

 

20363번: 당근 키우기

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

www.acmicpc.net

 

- 문제 -


- 풀이 과정 -

이 문제는 제시된 것처럼 온기를 10주면 수분이 1감소하고 수분을 10주면 온기가 1감소한다는 규칙이 있습니다.

이 규칙을 적용하여 다른 예시를 만들어 보았습니다.

예시를 풀어보면서 값이 더해지는 규칙을 살펴보니 큰 수를 먼저 더하고 작은 수를 더합니다. 그 다음 작은 수를 더하면서 발생한 감소 값을 다시 더해주니 결과값이 나왔습니다.

 

큰 수를 먼저 더하는 이유는 문제에 온기 또는 수분이 0이면 감소하지 않는 다는 조건이 있기 때문에 큰 수를 먼저 더해줍니다. 만약 작은 수를 먼저 더하고 큰 수를 더하면 감소하는 값이 더 많이 감소하기에 최소값이 나올 수 없게 됩니다.

 

돌아와서 값이 더해지는 규칙을 보면 온기 + 수분 + 감소 값(=min(온기,수분)/10)을 생각할 수 있습니다.

다시한번 식으로 표현하면 온기+수분+min(온기,수분)/10이 됩니다.

이 식을 적용하여 코드로 작성해주면 문제 풀이가 완료됩니다.


- 소스 코드 -

package com.test;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
    // 20363번 - 당근 키우기  
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String[] xy=br.readLine().split(" ");
        int x=Integer.parseInt(xy[0]);  //온기
        int y=Integer.parseInt(xy[1]);  //수분
        int sum=x+y+Math.min(x, y)/10;
        
        System.out.println(sum);
    }
}

 

의문점) 1000,124처럼 감소 값이 10이상이 되는 경우 풀이 과정대로 하면 1137이 나와야 하나 식으로 대입해서 계산하면 1136으로 출력되는 오차가 있다. 예제 2번도 마찬가지인데 정답으로 처리가 된다….

 

[참고 사이트] 이트