https://www.acmicpc.net/problem/31713
문제
각 케이스들에서 현재 있는 줄기와 잎의 개수가 주어진다.
이에 대해 각 줄기가 3개 또는 4개의 잎만 가지도록 하기 위해 추가해야 하는 최소 줄기, 잎 개수를 구하는 문제이다.
풀이
케이스에 따라 경우의 수는 크게 세 가지가 나올 수 있다. 아무것도 추가해주지 않거나, 잎을 추가해주어야 하거나, 줄기를 추가해주어야 한다.
- 추가가 필요 없는 경우
- 주어진 잎 개수가 줄기 개수의 3배 이상 4배 이하라면 조건에 만족하므로 추가할 필요가 없다
- 잎을 추가해주어야 하는 경우
- 주어진 잎 개수가 줄기 개수의 3배 미만이라면 잎 개수가 줄기 개수의 3배가 되도록 추가해주면 된다.
- 줄기를 추가해주어야 하는 경우
- 주어진 잎 개수가 줄기 개수의 4배를 초과한다면 줄기를 추가해주어야 한다. 단 줄기를 추가한 후에 잎이 부족하지 않는지 확인해야 한다. 예를 들어 처음 주어진 것이 잎 5개, 줄기 1개라면 먼저 줄기 1개를 추가해야 할 것이다. 그런데 줄기를 추가하면 줄기2개, 잎 5개가 되므로 잎이 부족해진다. 따라서 줄기를 추가해주어야 하는 경우에는 줄기를 추가한 후에 잎이 부족한지 확인하고, 잎이 부족하다면 잎을 추가해주어야 한다.
코드
import sys
test = int(sys.stdin.readline())
for _ in range(test):
stem, leaf = map(int, sys.stdin.readline().rstrip().split())
if stem * 4 >= leaf and stem * 3 <= leaf:
print(0)
elif stem * 3 > leaf:
print(stem * 3 - leaf)
else:
cnt = 0
while stem * 4 < leaf or stem * 3 > leaf:
if stem * 3 > leaf:
cnt += stem * 3 - leaf
leaf += stem * 3 - leaf
else:
cnt += (leaf + 3) // 4 - stem
stem += (leaf + 3) // 4 - stem
print(cnt)
'Online Judge > Baekjoon' 카테고리의 다른 글
[Baekjoon 21920] 서로소 평균 | Python (0) | 2024.08.30 |
---|---|
[Baekjoon 14915] 진수 변환기 | Python (0) | 2024.08.30 |
[Baekjoon 31263] 대한민국을 지키는 가장 긴 힘 | Python (0) | 2024.08.30 |
[Baekjoon 26264] 빅데이터? 정보보호! | Python (0) | 2024.08.30 |
[Baekjoon 9493] 길면 기차, 기차는 빨라, 빠른 것은 비행기 | Python (0) | 2024.08.30 |