백준 2251 물통 python

청천·2022년 9월 27일
0

백준

목록 보기
23/41

✍배운것
list 배열 만들고 해당 위치의 인덱스 값을 출력

👍잘한점
일단 구현 시도 해본 것. 항상 구현이 좀 귀찮을 것 같으면 그냥 넘어 갔다.
딕셔너리를 활용한 visited 구현

😅어려웠던점
set을 활용해 중복인 답을 제거 할려 했으나
set이 순서를 보장 못해주는 경우가 존재

🙄개선점
a, b, c 를 리스트 안에 넣고 구현을 하였으면 코드가 더 간단했을 것.


def DFS(a, b, c):
    if a == 0:
        arr[c] = True
    if visited.get((a,b,c), 1):
        visited[(a,b,c)] = 0
        if a != 0:
            if B-b <= a:
                DFS(a-B+b, B, c)
            elif B-b > a:
                DFS(0, a+b, c)
            if C-c <= a:
                DFS(a-C+c, b, C)
            elif C-c > a:
                DFS(0, b, a+c)
        if b != 0:
            if A-a <= b:
                DFS(A, b-A+a, c)
            else:
                DFS(a+b, 0, c)
            if C-c <= b:
                DFS(a, b-C+c, C)
            else:
                DFS(a, 0, c+b)
        if C != 0:
            if A-a <= c:
                DFS(A, b, c-A+a)
            else:
                DFS(a+c, b, 0)
            if B-b <= c:
                DFS(a, B, c-B+b)
            else:
                DFS(a, b+c, 0)


A, B ,C = list(map(int ,input().split()))
visited = {}
arr = [False] * 210
DFS(0,0,C)
for i in range(210):
    if arr[i]:
        print(i, end=" ")

0개의 댓글