알고리즘 문제 풀이/Python

python 백준 31713 행운을 빌어요

맛대 2024. 11. 20. 17:30

https://www.acmicpc.net/problem/31713

로직

  • A: 줄기의 수, B: 잎의 수
  • 3*A <= B <= 4*A의 경우 추가적인 줄기와 잎의 수가 필요 없음
  • 저 범위에 해당하지 않는 경우에 추가적인 재료가 필요
  • 먼저 A가 많으면 모두 세잎클로버로 만듬(모든 줄기에 잎을 3개씩 붙이고, 남은 줄기*3만큼의 잎이 필요함)
  • B가 많은 경우엔 네잎클로버 위주로 만들고, 줄기를 추가하여 세잎클로버 한두개를 섞는 방식으로 만들 수 있음
    • 하지만 이 경우 예시2번 tc 3번인 1 5가 주어질 경우 문제 발생
    • 줄기가 부족하여 A를 1 추가하여 2,5가 된 경우 다시 잎이 부족해짐
    • 그렇기에 B가 많은 경우의 조건을 먼저 체크 하여 A를 추가한 뒤, A가 많은 경우로 다시 체크
import sys
input = sys.stdin.readline
def solution(A:int,B:int)->int:
    cnt = 0
    A4 = 4*A
    if B > A4:
        num = B-A4
        cnt += (num // 4) + (1 if num%4 else 0)
        A += cnt
    A3 = 3*A
    if B < A3:
        cnt += A3-B
    return cnt

T = int(input())
ans = [0]*T
for tc in range(T):
    A,B = map(int,input().split())
    ans[tc] = solution(A,B)
print(*ans,sep='\n')