์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ทธ๋ž˜ํ”„

[๋ฐฑ์ค€ 2251 ๐Ÿฅ‡] ๋ฌผํ†ต

1eehyunji 2023. 9. 24. 01:33

https://www.acmicpc.net/problem/2251

 

2251๋ฒˆ: ๋ฌผํ†ต

๊ฐ๊ฐ ๋ถ€ํ”ผ๊ฐ€ A, B, C(1≤A, B, C≤200) ๋ฆฌํ„ฐ์ธ ์„ธ ๊ฐœ์˜ ๋ฌผํ†ต์ด ์žˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์•ž์˜ ๋‘ ๋ฌผํ†ต์€ ๋น„์–ด ์žˆ๊ณ , ์„ธ ๋ฒˆ์งธ ๋ฌผํ†ต์€ ๊ฐ€๋“(C ๋ฆฌํ„ฐ) ์ฐจ ์žˆ๋‹ค. ์ด์ œ ์–ด๋–ค ๋ฌผํ†ต์— ๋“ค์–ด์žˆ๋Š” ๋ฌผ์„ ๋‹ค๋ฅธ ๋ฌผํ†ต์œผ๋กœ ์Ÿ์•„ ๋ถ€

www.acmicpc.net

๋ฌธ์ œ ํ’€์ด

  • BFS๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋‹ค.
  • ํ•œ ๋ฌผํ†ต์—์„œ ๋‹ค๋ฅธ ๋ฌผํ†ต์œผ๋กœ ๋ฌผ์„ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์•„๋ž˜ 6๊ฐ€์ง€์ด๋‹ค.
    • 1๋ฒˆ ๋ฌผํ†ต -> 2๋ฒˆ ๋ฌผํ†ต
    • 1๋ฒˆ ๋ฌผํ†ต -> 2๋ฒˆ ๋ฌผํ†ต
    • 2๋ฒˆ ๋ฌผํ†ต -> 1๋ฒˆ ๋ฌผํ†ต
    • 2๋ฒˆ ๋ฌผํ†ต -> 3๋ฒˆ ๋ฌผํ†ต
    • 3๋ฒˆ ๋ฌผํ†ต -> 1๋ฒˆ ๋ฌผํ†ต
    • 3๋ฒˆ ๋ฌผํ†ต -> 2๋ฒˆ ๋ฌผํ†ต
  • ๋ฌผ์„ ์ฃผ๋Š” ๋ฌผํ†ต์˜ ๋ฌผ์ด ๋‹ค ๋น„์›Œ์ง€๊ฑฐ๋‚˜, ๋ฌผ์„ ๋ฐ›๋Š” ๋ฌผํ†ต์ด ๊ฝ‰ ์ฑ„์›Œ์งˆ ๋•Œ๊นŒ์ง€ ๋ถ€์–ด์•ผ ํ•œ๋‹ค.
  • BFS ํƒ์ƒ‰์„ ์œ„ํ•ด์„œ ์ดˆ๊ธฐ ๊ฐ’์œผ๋กœ ์•ž์— ๋‘ ๋ฌผํ†ต์€ ๋น„์›Œ์ ธ ์žˆ๊ณ , ์„ธ ๋ฒˆ์งธ ๋ฌผํ†ต๋งŒ ๊ฝ‰ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ์ธ (0,0,C)๋ฅผ ํ์— ๋„ฃ์–ด์คฌ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  visited๋ฅผ set ์ž๋ฃŒํ˜•์œผ๋กœ ์„ ์–ธํ•ด์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•˜๊ณ ,  ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด in ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ƒ์ˆ˜ ์‹œ๊ฐ„ ๋‚ด์— ๊ฐ€๋Šฅํ•˜๋„๋ก ํ–ˆ๋‹ค. 
    • ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋‚˜์„œ ๋ชจ๋ฒ” ๋‹ต์•ˆ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ visited[A][B][C]์— True/False๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ๋‹ค!
  • while queue๋ฅผ ๋Œ๋ฉด์„œ ํ˜„์žฌ ๋ฌผํ†ต์˜ ์ƒํƒœ๋ฅผ popํ•˜๊ณ , ์œ„์— ์ ์–ด๋‘” ๋ฌผ์„ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๊ณ„์‚ฐํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด 1๋ฒˆ ๋ฌผํ†ต์˜ ๋ฌผ์„ 2๋ฒˆ ๋ฌผํ†ต์œผ๋กœ ๋ถ“๋Š” ๊ฒฝ์šฐ, 1๋ฒˆ ๋ฌผํ†ต์˜ ๋ฌผ๊ณผ 2๋ฒˆ ๋ฌผํ†ต์˜ ๋ฌผ์„ ํ•ฉ์ณค์„ ๋•Œ 2๋ฒˆ ๋ฌผํ†ต์˜ ์šฉ๋Ÿ‰ B๋ณด๋‹ค ์ปค์ง€๋ฉด, 1๋ฒˆ ๋ฌผํ†ต์˜ ๋ชจ๋“  ๋ฌผ์„ ๋น„์šธ ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋ž˜์„œ 2๋ฒˆ ๋ฌผํ†ต์— ๋ถ€์šธ ์ˆ˜ ์žˆ๋Š” ๋งŒํผ๋งŒ ๋ถ“๊ณ , ๋‚˜๋จธ์ง€๋Š” 1๋ฒˆ ๋ฌผํ†ต์— ๋‚จ๋Š”๋‹ค.
    • (1๋ฒˆ ๋ฌผํ†ต์˜ ๋ฌผ + 2๋ฒˆ ๋ฌผํ†ต์˜ ๋ฌผ - B)
  • ๋˜, 1๋ฒˆ ๋ฌผํ†ต์˜ ๋ชจ๋“  ๋ฌผ์„ ๋ถ€์šธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—” 1๋ฒˆ ๋ฌผํ†ต์˜ ๋ฌผ์˜ ์–‘์€ 0์ด ๋˜๊ณ , 2๋ฒˆ ๋ฌผํ†ต์€ (1๋ฒˆ ๋ฌผํ†ต ๋ฌผ์˜ ์–‘ + 2๋ฒˆ ๋ฌผํ†ต ๋ฌผ์˜ ์–‘)์ด ๋œ๋‹ค. 
  • ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•ด ์œ„์™€ ๊ฐ™์€ ๊ณ„์‚ฐ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๊ณ , BFS ํƒ์ƒ‰ ๊ณผ์ •์—์„œ 1๋ฒˆ ๋ฌผํ†ต์˜ ์–‘ a๊ฐ€ 0์ธ ๊ฒฝ์šฐ์˜ 3๋ฒˆ ๋ฌผํ†ต์˜ ์–‘ c๋ฅผ ans ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
  • ans๋ฅผ ์ •๋ ฌํ•˜๊ณ , ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋
import sys
from collections import deque

A,B,C=map(int, sys.stdin.readline().strip().split(' '))

queue=deque()
queue.append((0,0,C))
visited=set()
ans=[]
while queue:
    a,b,c=queue.popleft()
    if (a,b,c) in visited:
        continue
    visited.add((a, b, c))
    if a==0:
        ans.append(c)
    # 1->2
    if a+b>B:
        # 1->2๋กœ ๋ฌผ์„ ๋ถ€์„ ๋•Œ 2์˜ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ
        queue.append((a+b-B, B, c))
    else:
        queue.append((0,a+b,c))
    # 1->3
    if a+c>C:
        queue.append((a+c-C,b,C))
    else:
        queue.append((0,b,a+c))
    # 2->1
    if a+b>A:
        queue.append((A,a+b-A,c))
    else:
        queue.append((a+b, 0,c))
    # 2->3
    if b+c>C:
        queue.append((a, b+c-C,C))
    else:
        queue.append((a, 0, b+c))
    # 3->1
    if a+c>A:
        queue.append((A, b, a+c-A))
    else:
        queue.append((a+c, b, 0))
    # 3->2
    if b+c>B:
        queue.append((a,B,b+c-B))
    else:
        queue.append((a,b+c,0))

ans.sort()
print(*ans, sep=' ')