반응형
알고리즘 분류 : 시뮬레이션
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)
참고
- 백준 온라인 저지 : BOJ 16769
반응형