#2251. 물통
Problem
Solution
- 첫 시작은 C 물통만 가득 차 있으니 전체 합은 C의 물통이다.
- 물을 옮기는 경우는 총 6경우로 0을 A, 1을 B, 2를 C라고 했을 때 다음과 같은 경우가 존재한다.
1
2
30 -> 1, 0 -> 2
1 -> 0, 1 -> 2
2 -> 0, 2 -> 1 - 경우의 수가 중복되지 않도록 표시해주는 배열은 2차원으로도 해결 가능하다. (전체 양은 일정하니 A, B만 알아도 C를 알 수 있기 때문이다.)
- 처음 A, B, C의 부피를 저장한다.
- 시작은 (0, 0)에서 시작하고, ans[C 물의 양]이 true임을 표시해 A가 0일 때 C의 물의양임을 나타낸다.
- BFS 탐색을 시작한다. 각 경우에서 계속해서 나아가는 방식이기에 적합하다. (경우의 수도 많지 않음)
물을 옮기는 건 2가지 경우가 존재한다.
from x → to y
- x + y ≤ Y
x + y의 값이 y를 가진 물통의 부피(Y)이하일 때
x를 다 옮길 수 있으므로 x를 가졌던 물통의 물의 양은 0이 된다.
y를 가진 물통의 물의 양은 x+y가 된다. - x + y > Y
x + y의 값이 Y보다 클 때 x를 다 옮길 수 없으므로
x를 가졌던 물통의 물의 양은 x + y - Y가된다.
y를 가졌던 물통의 물의 양은 Y가 된다.
- check와 A의 물의 양이 0인지 판단하여 BFS 탐색을 한다.
- x + y ≤ Y
1 Try
1 |
|