본문 바로가기

알고리즘/대회

[대회][BOJ][INU 코드페스티벌 2020] C번 20363 : 당근 키우기

문제를 정리해보자.

 

1. 햇빛 1번은 온기 +1

2. 햇빛 10번은 온기 +10, 수분 -1

 

3. 물 1번 수분 +1

4. 물 10번 수분 +10, 온기 -1

 

수분과 온기는 음수가 될 수 없다.

 

 

x, y = map(int, input().split())

if x < y:
    x, y = y, x

print(x + (y // 10) + y)  # y < x

 

 

이 문제는 처음에 얼마나 많은 햇빛 혹은 물은 주느냐가 관건이다.

예를 들어, 온기=10, 수분=10을 만들어야 한다고 하자.

최소한의 횟수로 만든다면 아래처럼 된다. 총 21회이다.

 

 

횟수/이름 온기 수분
1 0 0
2 10 0
3 9 10
4 10 10

 

 

하지만 다르게 생각해보자.

햇빛을 충분히 주어서 온기가 10보다 작은 상태를 만들지 않는다면 어떨까?

 

 

횟수/이름 온기 수분
1 0 0
2 11 0
3 10 10

 

 

이렇게 하면 일관된 식이 나온다. 그리고 모든 문제를 3회에 해결할 수 있다.

마찬가지로 이 예시는 21회이다.

 

 

온기와 수분 모두 음수가 될 수 없기 때문에, 둘 중 더 큰 수의 값을 먼저 채운다.

 

1. 온기가 크다면?

온기 + (수분 // 10) + 수분

 

온기 +수분 // 10은 온기에 수분으로 인해 깎일 값을 더한 것이다.

그리고 그 값에 수분을 더하면 구하려는 최소 횟수가 나온다.

 

 

2. 수분이 크다면?

수분 + (온기 // 10) + 온기

 

마찬가지이다.

 

 

 

쉬운 문제인데 빨리 생각하지 못해서 아쉽다.