chyam

[백준] 26070번, python - 곰곰이와 학식 본문

백준

[백준] 26070번, python - 곰곰이와 학식

chyam_eun 2025. 9. 3. 11:03

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

 

아래는 내 풀이고 마지막은 다른분의 풀이이다. 간단한 문제를 복잡하게 푼것같다. 

# 치킨 a, 피자 b, 햄버거 c마리. 
# 학생식당에서 사용 가능한 치킨 x, 피자 y, 햄버거 z장. 
# 치킨 3장 -> 피자 1장, 피자 3장 -> 햄버거 1장, 햄버거 3장 -> 치킨 1장.
import sys
input = sys.stdin.readline

def use(want, have, cnt):
    # 일단 사용가능한거 사용하기
    for i in range(3):
        if want[i] > have[i]: # 원하는게 더 많으면
            want[i] -= have[i]
            cnt += have[i]
            have[i] = 0 
        else: 
            have[i] -= want[i]
            cnt += want[i]
            want[i] = 0
    return want,have,cnt


def change(want, have, cnt):
    # 남는 식권이 있으면 바꾸기.
    for i in range(3):
        if have[i] > 0:
            have[(i+1)%3] += (have[i]//3)
            have[i] -=(have[i]//3) * 3
            want,have,cnt = use(want, have, cnt) # 바꿀때마다 사용가능한거 제때 사용하기

    return want, have, cnt

def main():
    want = list(map(int, input().split()))
    have = list(map(int, input().split()))
    cnt = 0

    while True:
        if (all(have[i] < 3 for i in range(3))): # 식권이 3개미만으로 남으면 더이상 바꿀수없음 
            break
        want, have, cnt = use(want, have, cnt)
        want, have, cnt = change(want, have, cnt)
        
    print(cnt)
    
main()
A, B, C = map(int, input().split())
X, Y, Z = map(int, input().split())
answer = 0

for _ in range(3):  # 순환 구조 때문에 3번만 반복
    # 치킨 제공
    chicken = min(A, X)
    answer += chicken
    A -= chicken
    X -= chicken

    # 피자 제공
    pizza = min(B, Y)
    answer += pizza
    B -= pizza
    Y -= pizza

    # 햄버거 제공
    burger = min(C, Z)
    answer += burger
    C -= burger
    Z -= burger

    # 교환: 치킨→피자, 피자→햄버거, 햄버거→치킨
    Y, Z, X = X // 3, Y // 3, Z // 3

print(answer)