프로그래밍/알고리즘

BOJ 16769 · Mixing Milk

반응형


알고리즘 분류 : 시뮬레이션  


1 → 2, 2 → 3, 3 → 1 (X → Y)을 순서대로 100번 해서 각 양동이에 우유가 얼마나 남았는지 확인하는 문제다. 순서대로 100번만 반복하면 된다.


  • 우선 옮기기 전에, X번 양동이에 남아있는 우유의 양과 Y번 양동이에 남아있는 우유의 양을 더해서 temp에 저장해둔다.
  • Y번 양동이의 최대치(C)와 temp와 비교한다.
  • temp가 C보다 크거나 같을 경우 (temp - C)를 X번 양동이에 저장하고, 아니라면 0을 X번 양동이에 저장한다.
  • Y번 양동이의 최대치(C)와 temp를 다시 비교한다.
  • temp가 C보다 크거나 같을 경우 C를 Y번 양동이에 저장하고, 아니라면 temp를 Y번 양동이에 저장한다.
  • 위 과정을 100번 반복한다.




C++ 소스코드


#include <cstdio>

int c[3], m[3];

void solve() {
    for (int i=0; i<100; i++) {
        int now = i % 3;
        int next = (now+1) % 3;
        int temp = m[now]+m[next];
        m[now] = (c[next] <= temp ? temp-c[next] : 0);
        m[next] = (c[next] <= temp ? c[next] : temp);
    }
}

int main() {
    for (int i=0; i<3; i++) scanf("%d %d", &c[i], &m[i]);
    solve();
    for (int i=0; i<3; i++) printf("%d\n", m[i]);
    return 0;
}




Python 3 소스코드


c, m = [0]*3, [0]*3
for i in range(3):
    c[i], m[i] = map(int, input().split())

for i in range(100):
    now = i % 3
    nxt = (now+1) % 3
    temp = m[now]+m[nxt]
    m[now] = temp-c[nxt] if c[nxt] <= temp else 0
    m[nxt] = c[nxt] if c[nxt] <= temp else temp

for i in m:
    print(i)




참고



반응형