๐ถ ๋ฌผํต
๋ฐฑ์ค Gold5
๋ฌธ์
๊ฐ๊ฐ ๋ถํผ๊ฐ A, B, C(1โคA, B, Cโค200) ๋ฆฌํฐ์ธ ์ธ ๊ฐ์ ๋ฌผํต์ด ์๋ค. ์ฒ์์๋ ์์ ๋ ๋ฌผํต์ ๋น์ด ์๊ณ , ์ธ ๋ฒ์งธ ๋ฌผํต์ ๊ฐ๋(C ๋ฆฌํฐ) ์ฐจ ์๋ค. ์ด์ ์ด๋ค ๋ฌผํต์ ๋ค์ด์๋ ๋ฌผ์ ๋ค๋ฅธ ๋ฌผํต์ผ๋ก ์์ ๋ถ์ ์ ์๋๋ฐ, ์ด๋์๋ ํ ๋ฌผํต์ด ๋น๊ฑฐ๋, ๋ค๋ฅธ ํ ๋ฌผํต์ด ๊ฐ๋ ์ฐฐ ๋๊น์ง ๋ฌผ์ ๋ถ์ ์ ์๋ค. ์ด ๊ณผ์ ์์ ์์ค๋๋ ๋ฌผ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
์ด์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค๋ณด๋ฉด ์ธ ๋ฒ์งธ ๋ฌผํต(์ฉ๋์ด C์ธ)์ ๋ด๊ฒจ์๋ ๋ฌผ์ ์์ด ๋ณํ ์๋ ์๋ค. ์ฒซ ๋ฒ์งธ ๋ฌผํต(์ฉ๋์ด A์ธ)์ด ๋น์ด ์์ ๋, ์ธ ๋ฒ์งธ ๋ฌผํต(์ฉ๋์ด C์ธ)์ ๋ด๊ฒจ์์ ์ ์๋ ๋ฌผ์ ์์ ๋ชจ๋ ๊ตฌํด๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ธ ์ ์ A, B, C๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๋ต์ ์ถ๋ ฅํ๋ค. ๊ฐ ์ฉ๋์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
์์ ์ ๋ ฅ 1
8 9 10
์์ ์ถ๋ ฅ 1
1 2 8 9 10
๐ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ
๊ฒฐ๋ก ์ ์ผ๋ก ๋งํ๋ฉด [๊ทธ๋ํ ํ์]์ ์ฌ์ฉํ์ฌ ํ์ด์ผ ํ๋ค. ๋ชจ๋ ๊ทธ๋ํ๋ฅผ ํ์ํด์ผ ํ๋ฏ๋ก BFS,DFS ๋ฌด์์ ์ฌ์ฉํ๋ ์๊ด ์๋ค.
๋๋ ์์ง๊น์ง๋ ์ด ๋ฌธ์ ๊ฐ ์ ๊ทธ๋ํ ํ์ ๋ฌธ์ ์ธ์ง ์ดํด๊ฐ ๊ฐ์ง ์๋๋ค. ๋ ผ๋ฆฌ ์งํ ๊ณผ์ ์ ์๋ฃจ์ ์ ํตํ์ฌ ์ดํด๋ฅผ ํ์์ง๋ง ์ด๋ป๊ฒ ํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๊ทธ๋ํ ํ์์ด๋ผ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ ์ฌ๋ฆด ์ ์์๊น? ์ผ์ค์ธ๊ฑด๊ฐ.. ๐ญ
์ด ์ง๋ฌธ์ ์คํฐ๋ ๋ฉค๋ฒ๋ค๊ณผ ๊ฐ์ด ํ ๋ก ์ ํด๋ณด์์ผ๊ฒ ๋ค.
๐ ๊ณผ์ ์ค๊ณ/๊ด๋ฆฌ ๐
๋ช ์พํ๊ณ ๊น๋ํ๊ฒ ํผ ์ฌ๋์ด ์์ด์ ๋ด์ฉ์ ๊ฐ์ ธ์ ๋ณด์๋ค.
CODE
from collections import deque
import sys
input = sys.stdin.readline
def pour(x,y):
if not visited[x][y]:
visited[x][y] = True
q.append((x,y))
def bfs():
while q:
x,y = q.popleft()
z = c-x-y
if x == 0:
result.append(z)
# A --> B
water = min(x,b-y)
pour(x-water,y+water)
# A --> C
water = min(x,c-z)
pour(x-water,y)
# B --> A
water = min(y,a-x)
pour(x+water,y-water)
# B --> C
water = min(y,c-z)
pour(x,y-water)
# C --> A
water = min(z,a-x)
pour(x+water,y)
# C --> B
water = min(z,b-y)
pour(x,y+water)
a,b,c = map(int,input().split())
visited = [[False]*(b+1) for _ in range(a+1)]
visited[0][0] = True
q = deque([(0,0)])
result = []
bfs()
result.sort()
print(*result)