ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
A, B, C์ ๋ฌผํต์ด ์๊ณ , ์ฒ์์๋ C์ ๋ฌผํต์๋ง ๋ฌผ์ด ๊ฐ๋์ฐจ ์๋ค. ๋ฌผํต์ ๋ฌผ์ ํ๋ฒ์ ๋ค๋ฅธ ํต์ผ๋ก ์ด๋์ํค๋ ๊ฒฝ์ฐ, A๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ์ C์ ๋ฌผํต์ ์ฐจ์๋ ๋ฌผ์ ์์ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ๋ฌผ์ ์ฎ๊ธธ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ 6๊ฐ์ง๊ฐ ์กด์ฌํ๋ค. ์ด๋ ์์ด๋ก DFS๋ permutaion์ ์ด์ฉํด ๊ตฌํด๋ ๋์ง๋ง, `A → B`, `A → C`, `B → A`, `B → C`, `C → A`, `C → B`์ ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ฅผ ํ๋์ฝ๋ฉํ์ฌ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ถ๋ฅํ์๋ค.
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด BFS๋ฅผ ํตํด ๋์ผํ ๊ฒฝ์ฐ์ ์์ธ์ง ํ๋จํ๋ฉด์, ๋ฌผ์ ์ฎ๊ฒป์ ๋ A๊ฐ ๋น๋์ง ํ์ธํ๋ฉด ๋ฌธ์ ์์ ์ํ๋ ๋ต์ ๋ฐํํ ์ ์๋ค.
์ฝ๋
from sys import stdin
from collections import deque, defaultdict
def bfs(a, b, c):
q = deque([[a, b, c]])
check[tuple(q[0])] = True
while q:
cur_case = q.popleft()
if not cur_case[A]:
answer.append(cur_case[C])
for rm_water, add_water in cases:
next_case = cur_case[:]
if cur_case[rm_water] + cur_case[add_water] > bucket_size[add_water]:
next_case[rm_water] = \
cur_case[rm_water] + cur_case[add_water] - bucket_size[add_water]
next_case[add_water] = bucket_size[add_water]
else:
next_case[add_water] = cur_case[rm_water] + cur_case[add_water]
next_case[rm_water] = 0
if not check[tuple(next_case)]:
check[tuple(next_case)] = True
q.append(next_case)
if __name__ == '__main__':
answer = []
A, C = 0, 2
cases = ((0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1))
check = defaultdict(bool)
bucket_size = list(map(int, stdin.readline().split()))
bfs(0, 0, bucket_size[C])
print(*sorted(answer))
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 2805 ๋๋ฌด ์๋ฅด๊ธฐ (0) | 2020.08.22 |
---|---|
๋ฐฑ์ค: 1654 ๋์ ์๋ฅด๊ธฐ (0) | 2020.08.22 |
๋ฐฑ์ค: 12886 ๋ ๊ทธ๋ฃน (0) | 2020.08.21 |
๋ฐฑ์ค: 1339 ๋จ์ด ์ํ (0) | 2020.08.20 |
๋ฐฑ์ค: 1107 ๋ฆฌ๋ชจ์ปจ (0) | 2020.08.19 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ