[BOJ] 16769 - Mixing Milk
사용 언어: Python3
문제
문제가 영어로 되어있다. 간단히 설명하자면,
3개의 bucket이 존재하고 각각의 bucket은 capacity(용량)와 milk(담긴 우유량)로 구성되어 있다.
하나의 bucket에서 다른 bucket으로 우유를 붓는 행동을 100번 했을 때,
각 bucket에 담긴 우유량(milk)을 구하는 문제이다.
다만 우유를 붓는 순서는 1번 -> 2번, 2번 -> 3번, 3번 -> 1번의 순서이고,
출발 bucket의 우유량이 empty가 되거나, 도착 bucket의 우유량이 full이 될 때까지 붓는다.
When Farmer John pours from bucket `a` into bucket `b`,
he pours as much milk as possible until either bucket `a` becomes empty or bucket `b` becomes full.
코드
내 풀이
# 버킷 a -> 버킷 b 로 우유를 붓는데,
# 버킷 a가 empty 이거나 버킷 b가 full이 될때까지
def pourMilk(srcBuck, destBuck):
pourAmount = min(srcBuck[1], destBuck[0]-destBuck[1])
srcBuck[1] -= pourAmount
destBuck[1] += pourAmount
# input
# 각 버킷마다 용량(capacity), 담긴양(milk)
bucket1 = list(map(int, input().split()))
bucket2 = list(map(int, input().split()))
bucket3 = list(map(int, input().split()))
for _ in range(33):
pourMilk(bucket1, bucket2)
pourMilk(bucket2, bucket3)
pourMilk(bucket3, bucket1)
pourMilk(bucket1, bucket2)
# output
# 100번 붓고 각각 버킷에 남은 우유
print(bucket1[1])
print(bucket2[1])
print(bucket3[1])
다른 풀이
# 용량과 우유를 따로 관리하는 배열
capacity, milk = [0, 0, 0], [0, 0, 0]
# capacity, milk = list(), list()
# input
for i in range(3):
capacity[i], milk[i] = map(int, input().split())
for i in range(100):
src = i % 3 # 출발지 인덱스
dest = (i+1) % 3 # 목적지 인덱스 # (0 -> 1 -> 2 -> 0 -> ...) 처럼 회전하기 위해서 %3
pourAmount = min(milk[src], capacity[dest]-milk[dest])
milk[src] -= pourAmount
milk[dest] += pourAmount
# output
for x in milk:
print(x)
capacity
와milk
을 분리하여 관리한다.- 코드가 길어진다는 단점이 있지만 직관적이라는 장점이 있다.
또 다른 풀이
# 용량과 우유를 함께 관리하는 dict
bucket = {}
# input
for i in range(3):
c, m = map(int, input().split())
bucket[i] = [c, m] # list
# bucket[i][0]: capacity
# bucket[i][1]: milk
# 0 -> 1 -> 2 -> 0 -> ...
for i in range(100):
src = i % 3
dest = (i+1) % 3
pourAmount = min(bucket[src][1], bucket[dest][0] - bucket[dest][1])
bucket[src][1] -= pourAmount # 출발지 bucket의 milk
bucket[dest][1] += pourAmount # 목적지 bucket의 milk
# output
for x in bucket.values():
print(x[1])
capacity
와milk
을 분리하지 않고 하나의bucket
으로 관리할 수도 있다.- 코드가 간결해진다는 장점이 있지만 직관적이지 않다는 단점이 있다.
💛 개인 공부 기록용 블로그입니다. 👻