[Baekjoon] 2251 ๋ฌผํ†ต python

sorzzzzyยท2021๋…„ 8์›” 4์ผ
0

Baekjoon Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
25/46
post-thumbnail

๐Ÿท ๋ฌธ์ œ


๐Ÿ’ก ์ฝ”๋“œ

from sys import stdin
from collections import deque

def pour(x,y):
    if visited[x][y] == False:
        visited[x][y] = True
        q.append([x,y])

def find():
    while q:
        x,y = q.popleft()
        # ๋ฌผํ†ต c์— ๋‚จ์•„์žˆ๋Š” ๋ฌผ์˜ ์–‘
        res = c-x-y

        # a๋ฌผํ†ต์ด ๋น„์–ด์žˆ์„ ๋•Œ c๋ฌผํ†ต์— ๋‚จ์•„์žˆ๋Š” ๋ฌผ์˜ ์–‘์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ
        if x == 0:
            res_list.append(res)

        '''
        ex) a->b๋ฌผํ†ต์œผ๋กœ ๋ฌผ์„ ์˜ฎ๊ธฐ๋Š” ๊ฒฝ์šฐ
            1. a๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌผ์„ ๋ชจ๋‘ ์˜ฎ๊น€
            2. b๊ฐ€ ์•ž์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฌผ์˜ ์–‘ ๋งŒํผ๋งŒ ๋ฐ›์Œ
        ์ด ๋‘ ๊ฒฝ์šฐ ์ค‘, ๋” ์ž‘์€ ๊ฐ’์„ ์˜ฎ๊ธธ ์–‘์œผ๋กœ ์ •ํ•จ
            : a๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌผ์˜ ์–‘์ด b๊ฐ€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์–‘๋ณด๋‹ค ํฌ๋ฉด ์•ˆ๋˜๋ฏ€๋กœ 
        '''
        # a๋ฌผํ†ต์—์„œ b๋ฌผํ†ต
        water = min(x, b-y)
        pour(x-water, y+water)
        # a๋ฌผํ†ต์—์„œ c๋ฌผํ†ต
        water = min(x, c-res)
        pour(x - water, y)
        # b๋ฌผํ†ต์—์„œ a๋ฌผํ†ต
        water = min(y, a-x)
        pour(x + water, y-water)
        # b๋ฌผํ†ต์—์„œ c๋ฌผํ†ต
        water = min(y, c-res)
        pour(x, y-water)
        # c๋ฌผํ†ต์—์„œ a๋ฌผํ†ต
        water = min(res, a-x)
        pour(x+water, y)
        # c๋ฌผํ†ต์—์„œ b๋ฌผํ†ต
        water = min(res, b-y)
        pour(x, y+water)

a,b,c = map(int, stdin.readline().split())

visited = [[False for _ in range(b+1)] for _ in range(a+1)]
visited[0][0] = True

q = deque()
# ๋ฌผํ†ต a,b์— ๋“ค์–ด์žˆ๋Š” ๋ฌผ์˜ ์–‘(๋ฌผํ†ต a,b๋Š” ๋น„์–ด์žˆ๋Š” ์ƒํƒœ๋กœ ์‹œ์ž‘)
q.append([0,0])

res_list = []
# ํƒ์ƒ‰์‹œ์ž‘
find()

# ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
res_list.sort()
for i in res_list:
    print(i, end=' ')

๐Ÿ”‘

profile
Backend Developer

0๊ฐœ์˜ ๋Œ“๊ธ€