[BOJ][๐ก5][๋ฐฑ์ค#05014] ์คํํธ๋งํฌ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๊ฐํธ๋ ์ฝ๋ฉ ๊ต์ก์ ํ๋ ์คํํธ์ ์คํํธ๋งํฌ์ ์ง์ํ๋ค. ์ค๋์ ๊ฐํธ์ ๋ฉด์ ๋ ์ด๋ค. ํ์ง๋ง, ๋ฆ์ ์ ์ ๊ฐํธ๋ ์คํํธ๋งํฌ๊ฐ ์๋ ๊ฑด๋ฌผ์ ๋ฆ๊ฒ ๋์ฐฉํ๊ณ ๋ง์๋ค. ์คํํธ๋งํฌ๋ ์ด F์ธต์ผ๋ก ์ด๋ฃจ์ด์ง ๊ณ ์ธต ๊ฑด๋ฌผ์ ์ฌ๋ฌด์ค์ด ์๊ณ , ์คํํธ๋งํฌ๊ฐ ์๋ ๊ณณ์ ์์น๋ G์ธต์ด๋ค. ๊ฐํธ๊ฐ ์ง๊ธ ์๋ ๊ณณ์ S์ธต์ด๊ณ , ์ด์ ์๋ฆฌ๋ฒ ์ดํฐ๋ฅผ ํ๊ณ G์ธต์ผ๋ก ์ด๋ํ๋ ค๊ณ ํ๋ค. ๋ณดํต ์๋ฆฌ๋ฒ ์ดํฐ์๋ ์ด๋ค ์ธต์ผ๋ก ์ด๋ํ ์ ์๋ ๋ฒํผ์ด ์์ง๋ง, ๊ฐํธ๊ฐ ํ ์๋ฆฌ๋ฒ ์ดํฐ๋ ๋ฒํผ์ด 2๊ฐ๋ฐ์ ์๋ค. U๋ฒํผ์ ์๋ก U์ธต์ ๊ฐ๋ ๋ฒํผ, D๋ฒํผ์ ์๋๋ก D์ธต์ ๊ฐ๋ ๋ฒํผ์ด๋ค. (๋ง์ฝ, U์ธต ์, ๋๋ D์ธต ์๋์ ํด๋นํ๋ ์ธต์ด ์์ ๋๋, ์๋ฆฌ๋ฒ ์ดํฐ๋ ์์ง์ด์ง ์๋๋ค) ๊ฐํธ๊ฐ G์ธต์ ๋์ฐฉํ๋ ค๋ฉด, ๋ฒํผ์ ์ ์ด๋ ๋ช ๋ฒ ๋๋ฌ์ผ ํ๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ฝ, ์๋ฆฌ๋ฒ ์ดํฐ๋ฅผ ์ด์ฉํด์ G์ธต์ ๊ฐ ์ ์๋ค๋ฉด, โuse the stairsโ๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ F, S, G, U, D๊ฐ ์ฃผ์ด์ง๋ค. (1 โค S, G โค F โค 1000000, 0 โค U, D โค 1000000) ๊ฑด๋ฌผ์ 1์ธต๋ถํฐ ์์ํ๊ณ , ๊ฐ์ฅ ๋์ ์ธต์ F์ธต์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฐํธ๊ฐ S์ธต์์ G์ธต์ผ๋ก ๊ฐ๊ธฐ ์ํด ๋๋ฌ์ผ ํ๋ ๋ฒํผ์ ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ์๋ฆฌ๋ฒ ์ดํฐ๋ก ์ด๋ํ ์ ์์ ๋๋ โuse the stairsโ๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
10 1 10 2 1
์ถ๋ ฅ
6
์์ 2
์ ๋ ฅ
100 2 1 1 0
์ถ๋ ฅ
use the stairs
My Sol
import sys
from collections import deque
input = sys.stdin.readline
total, start, goal, up, down = map(int, input().split())
Q = deque([start])
visit = [-1]*(total+1)
visit[start] = 0
while Q:
s = Q.popleft()
if s+up <= total:
if visit[s+up] == -1:
visit[s+up] = visit[s] + 1
Q.append(s+up)
if s - down > 0:
if visit[s-down] == -1:
visit[s-down] = visit[s] + 1
Q.append(s-down)
ret = 'use the stairs' if visit[goal] == -1 else visit[goal]
print(ret)
BFS๋ฅผ ์ด์ฉํ๋ ๋ฌธ์ ์๋ค. deque์์ ํ๋์ฉ ์ธต์ ๋นผ์ up, down์ ๋ฐ์ง๋ฉฐ visit์ ์ฑ์ด๋ค. ์ดํ Q๊ฐ ๋๋๋ฉด visit[goal]์ ์ฒดํฌํด ๋ฐฉ๋ฌธํ๋ค๋ฉด ์ด๋ฅผ ์ถ๋ ฅํ๊ณ ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด use the stairs ๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ