[๋ฐฑ์ค 14226 ๐ฅ] ์ด๋ชจํฐ์ฝ
https://www.acmicpc.net/problem/14226
14226๋ฒ: ์ด๋ชจํฐ์ฝ
์์ ์ด๋ ๋งค์ฐ ๊ธฐ์๊ธฐ ๋๋ฌธ์, ํจ๋น์ด์๊ฒ ์ค๋ง์ผ ์ด๋ชจํฐ์ฝ์ S๊ฐ ๋ณด๋ด๋ ค๊ณ ํ๋ค. ์์ ์ด๋ ์ด๋ฏธ ํ๋ฉด์ ์ด๋ชจํฐ์ฝ 1๊ฐ๋ฅผ ์ ๋ ฅํ๋ค. ์ด์ , ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง ์ฐ์ฐ๋ง ์ฌ์ฉํด์ ์ด๋ชจํฐ์ฝ์ S๊ฐ ๋ง
www.acmicpc.net
๋ฌธ์
์์ ์ด๋ ๋งค์ฐ ๊ธฐ์๊ธฐ ๋๋ฌธ์, ํจ๋น์ด์๊ฒ ์ค๋ง์ผ ์ด๋ชจํฐ์ฝ์ S๊ฐ ๋ณด๋ด๋ ค๊ณ ํ๋ค.
์์ ์ด๋ ์ด๋ฏธ ํ๋ฉด์ ์ด๋ชจํฐ์ฝ 1๊ฐ๋ฅผ ์ ๋ ฅํ๋ค. ์ด์ , ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง ์ฐ์ฐ๋ง ์ฌ์ฉํด์ ์ด๋ชจํฐ์ฝ์ S๊ฐ ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํ๋ค.
- ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ ๋ชจ๋ ๋ณต์ฌํด์ ํด๋ฆฝ๋ณด๋์ ์ ์ฅํ๋ค.
- ํด๋ฆฝ๋ณด๋์ ์๋ ๋ชจ๋ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ค.
- ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ์ค ํ๋๋ฅผ ์ญ์ ํ๋ค.
๋ชจ๋ ์ฐ์ฐ์ 1์ด๊ฐ ๊ฑธ๋ฆฐ๋ค. ๋, ํด๋ฆฝ๋ณด๋์ ์ด๋ชจํฐ์ฝ์ ๋ณต์ฌํ๋ฉด ์ด์ ์ ํด๋ฆฝ๋ณด๋์ ์๋ ๋ด์ฉ์ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋๋ค. ํด๋ฆฝ๋ณด๋๊ฐ ๋น์ด์๋ ์ํ์๋ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํ ์ ์์ผ๋ฉฐ, ์ผ๋ถ๋ง ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ ์๋ ์๋ค. ๋ํ, ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ ์ค ์ผ๋ถ๋ฅผ ์ญ์ ํ ์ ์๋ค. ํ๋ฉด์ ์ด๋ชจํฐ์ฝ์ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ฉด, ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ์ ๊ฐ์๊ฐ ํ๋ฉด์ ์ถ๊ฐ๋๋ค.
์์ ์ด๊ฐ S๊ฐ์ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ๋ง๋๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ต์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ S (2 ≤ S ≤ 1000) ๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ด๋ชจํฐ์ฝ์ S๊ฐ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์๊ฐ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
import sys
from collections import deque
s=int(sys.stdin.readline())
# init queue
queue=deque()
# ํ๋ฉด์ ํ์๋ ์ด๋ชจํฐ์ฝ ๊ฐ์, ํด๋ฆฝ๋ณด๋์ ์ ์ฅ๋ ์ด๋ชจํฐ์ฝ ๊ฐ์, ์์ ์๊ฐ
queue.append((1, 0, 0))
# ๋ฐฉ๋ฌธ ํ์
visited=set((1,0,0))
while queue:
m, c, t = queue.popleft()
if m==s:
print(t)
break
# 1) ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ ๋ชจ๋ ๋ณต์ฌํด์ ํด๋ฆฝ๋ณด๋์ ์ ์ฅ
if m>0 and (m, m, t+1) not in visited:
queue.append((m, m, t+1))
visited.add((m, m, t+1))
# 2) ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ๋ถ์ฌ๋ฃ๊ธฐ
if c>0 and (m+c, c, t+1) not in visited:
queue.append((m+c, c, t+1))
visited.add((m+c, c, t+1))
# 3) ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ 1๊ฐ ์ญ์
if m>0 and (m-1, c, t+1) not in visited:
queue.append((m-1,c,t+1))
visited.add((m-1,c,t+1))
- BFS๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ ํ๋ฆฌ๋ ๋ฌธ์ ์๋ค!
- ์ฒ์์ ํ๋ฉด์ ํ์๋ ์ด๋ชจํฐ์ฝ 1๊ฐ, ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๋ ์ด๋ชจํฐ์ฝ 0๊ฐ, ์๊ฐ์ 0์ด๋ก ์ ์ฅํด์ ํ์ ๋ฃ์ด์คฌ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ๊ฒ์ฌํ ํ๋ฉด์ ํ์๋ ์ด๋ชจํฐ์ฝ, ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๋ ์ด๋ชจํฐ์ฝ, ๊ฒฝ๊ณผ ์๊ฐ์ ๋ค์ ๊ฒ์ฌํด์ฃผ์ง ์๊ธฐ ์ํด์ visited set์ ๋ฃ์ด์ค๋ค.
- ์ด์ ๊ฐ ์ํ์ ๋ํด์ 1๋ฒ ์ฐ์ฐ, 2๋ฒ ์ฐ์ฐ, 3๋ฒ ์ฐ์ฐ์ ์ฐจ๋ก๋ก ์ํํด์ฃผ๋ฉด์ BFS ํ์์ ๊ฑฐ์น๊ณ , ํ๋ฉด์ ํ์๋ ์ด๋ชจํฐ์ฝ ๊ฐ์ m์ด s์ ๋์ผํด์ง๋ฉด ๊ฒฝ๊ณผ ์๊ฐ์ ์ถ๋ ฅํ๊ณ while๋ฌธ ํ์์ ์ข
๋ฃํด์ฃผ๋ฉด ๋๋ค.
- 1๋ฒ ์ฐ์ฐ์ ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ ๋ชจ๋ ๋ณต์ฌํด์ ํด๋ฆฝ๋ณด๋์ ์ ์ฅํ๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก, ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ๊ฐ์๊ฐ ๊ณง ํด๋ฆฝ๋ณด๋์ ๊ฐ์๊ฐ ๋๋ค. ๋, ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ ๊ฐ์๊ฐ 0๊ฐ๋ผ๋ฉด ์ด ์ฐ์ฐ์ ํด๋ฆฝ๋ณด๋๋ฅผ ๋น์์ฃผ๋ ์ฐ์ฐ์ด ๋๋ฏ๋ก ์๋ฏธ๊ฐ ์๋ค. ๊ทธ๋์ m์ด 0๊ฐ ์ด์์ธ์ง ํ์ธํ๊ณ , ํด๋น ์ฐ์ฐ์ด ๋ฐฉ๋ฌธํ์ง ์์ ์ํ์ธ์ง ํ์ธํด์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ํ์ ๋ฃ์ด์ฃผ๊ณ , ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.
- 2๋ฒ ์ฐ์ฐ์ ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ๋ถ์ฌ๋ฃ๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก, ํด๋ฆฝ๋ณด๋์ ์๋ ์ด๋ชจํฐ์ฝ์ ํ๋ฉด์ ์ถ๊ฐํด์ค๋ค. ํด๋ฆฝ๋ณด๋์ ์ด๋ชจํฐ์ฝ์ด ์กด์ฌํ์ง ์๋ค๋ฉด ๋ถ์ฌ๋ฃ๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก c>0์ธ์ง ํ์ธํ๊ณ , ํด๋น ์ฐ์ฐ์ด ๋ฐฉ๋ฌธํ์ง ์์ ์ํ์ธ์ง ํ์ธํด์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ํ์ ๋ฃ์ด์ฃผ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.
- 3๋ฒ ์ฐ์ฐ์ ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ์ 1๊ฐ ์ญ์ ํด์ฃผ๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก, ํ๋ฉด์ ์๋ ์ด๋ชจํฐ์ฝ ๊ฐ์๋ฅผ -1ํด์ค๋ค. ๋ง์ฝ ํ๋ฉด์ ์ด๋ชจํฐ์ฝ์ด ์กด์ฌํ์ง ์๋ค๋ฉด ์ํํ ์ ์์ผ๋ฏ๋ก m>0์ธ์ง ํ์ธํ๊ณ , ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํ ํ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ํ์ ๋ฃ์ด์ฃผ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.