문제를 정리해보자.
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) + 온기
마찬가지이다.
쉬운 문제인데 빨리 생각하지 못해서 아쉽다.
'알고리즘 > 대회' 카테고리의 다른 글
[대회][BOJ][INU 코드페스티벌 2021] B번 23842 : 성냥개비 (0) | 2021.12.20 |
---|---|
[대회][BOJ][INU 코드페스티벌 2021] A번 23841 : 데칼코마니 (0) | 2021.12.20 |
[대회][BOJ][INU 코드페스티벌 2020] D번 20365 : 블로그2 (0) | 2021.11.18 |
[대회][BOJ][INU 코드페스티벌 2020] D번 20364 : 부동산 다툼 (0) | 2021.11.18 |
[대회][BOJ][INU 코드 페스티벌 2020] 후기 (0) | 2021.11.18 |