Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

킹솔이

[백준/Python] 14867 물통 본문

Algorithm

[백준/Python] 14867 물통

킹솔이 2021. 1. 13. 17:48
import sys
from _collections import deque

visited = {}
a, b, c, d = map(int, sys.stdin.readline().split())

def bfs():
    queue = deque()
    queue.append((0,0))
    visited[(0,0)] = 1
    if c==0 and d==0:
        return 0

    while queue:
        x, y = queue.popleft()
        
        #Fill A
        if not visited.get((a, y)):
            queue.append((a, y))
            visited[(a, y)] = visited[(x, y)] + 1
        #Fill B
        if not visited.get((x, b)):
            queue.append((x, b))
            visited[(x, b)] = visited[(x, y)] + 1
        #Empty A
        if not visited.get((0, y)):
            queue.append((0, y))
            visited[(0, y)] = visited[(x, y)] + 1
        #Empty B
        if not visited.get((x, 0)):
            queue.append((x, 0))
            visited[(x, 0)] = visited[(x, y)] + 1
        #Move A to B        
        if x+y >= b:
            if not visited.get((x+y-b, b)):
                queue.append((x+y-b, b))
                visited[(x+y-b, b)] = visited[(x, y)] + 1
        else:
            if not visited.get((0, x+y)):
                queue.append((0, x+y))
                visited[(0, x+y)] = visited[(x, y)] + 1
        
        #move B to A
        if x+y >= a:
            if not visited.get((a, x+y-a)):
                queue.append((a, x+y-a))
                visited[(a, x+y-a)] = visited[(x, y)] + 1
        else:            
            if not visited.get((x+y, 0)):
                    queue.append((x+y, 0))    
                    visited[(x+y, 0)] = visited[(x, y)] + 1

        if visited.get((c,d)):
            if visited[(x, y)]>0:
                return visited[(x, y)]
    return -1
            
print(bfs())

'Algorithm' 카테고리의 다른 글

[백준/Python] 2170 선 긋기  (0) 2021.01.15
[백준/Python] 13023 ABCDE  (0) 2021.01.13
[백준/Python] 1202 보석 도둑  (0) 2021.01.08
[백준/Python] 2606 바이러스  (0) 2021.01.08
[백준/Python] 2891 카약과 강풍  (1) 2021.01.06