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번도 마찬가지인데 정답으로 처리가 된다….
[참고 사이트] 참고사이트
'문제풀이 > 백준' 카테고리의 다른 글
[백준] 15565번 - 귀여운 라이언(JAVA) (0) | 2021.05.21 |
---|---|
[백준] 2531번 - 회전 초밥(JAVA) (0) | 2021.05.11 |
[백준] 11047번 – 동전 0(JAVA) (0) | 2021.04.08 |
[백준] 2667번 - 단지번호붙이기(JAVA) (0) | 2021.04.06 |
[백준] 10870번 – 피보나치 수 5(JAVA) (0) | 2021.03.30 |