๐ค๋ฌธ์ ํด๊ฒฐ
-
G5 | BFS, ๊ทธ๋ํ
๊ฐ ์ ์๋ ๊ธธ์ด 2๊ฐ์ง์ธ BFS ๋ฌธ์ .
ํ ์ง์ ์์ ์ฌ๋ผ๊ฐ๊ฑฐ๋ ๋ด๋ ค๊ฐ๊ฑฐ๋ ํ๋ฉด์ ์ํ๋ ์ธต์ ๋์ฐฉํ ์ ์๋์ง ํ๋ณํ๋ค.
- ์ต์ด ์์์ S์์ ์ฌ๋ผ๊ฐ๊ฑฐ๋(U) ๋ด๋ ค๊ฐ๋ค(D)
- ๋ง์ฝ ์ฌ๋ผ๊ฐ ๋ ๊ฑด๋ฌผ์ ๋์ด๋ณด๋ค ๋์ผ๋ฉด ๋ชป์ฌ๋ผ๊ฐ๊ณ , ๋ด๋ ค๊ฐ ๋ 1์ธต๋ณด๋ค ๋ฎ์ผ๋ฉด ๋ชป๋ด๋ ค๊ฐ๋ค.
- ๋ visited๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ฌ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ์๋์ง ๋ณด๊ณ ๋ฐฉ๋ฌธ์ ์ํ๋ ์ธต๋ง ๋ฐฉ๋ฌธํ๋ค.
- BFS๋ก ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ธต์ ํ๋ฒ ๋ ๋ค๋ฅด๋ฉด ํฐ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ฏ๋ก ๋ฌด์กฐ๊ฑด ์ํด์ด๋ค.
- ๊ณ์ ๋ฐฉ๋ฌธ์ ํ๋ฉด์ ์ํ๋ ์ง์ (G)์ ๋์ฐฉํ๋ค๋ฉด ๊ทธ ๊ฐ์ ๋ฆฌํดํด์ฃผ๊ณ , ๋์ฐฉํ์ง ๋ชปํ๋ค๋ฉด 'use the stairs' ๋ฅผ ๋ฆฌํดํด์ค๋ค.
๐จ
๐ป์์ค ์ฝ๋
from collections import deque
def bfs():
q = deque([S])
visited = [0] * (F + 1)
visited[S] = 1
while q:
c = q.popleft()
if c == G:
print(visited[G] - 1)
return
up = c + U
down = c - D
if up <= F and not visited[up]:
q.append(up)
visited[up] = visited[c] + 1
if down > 0 and not visited[down]:
q.append(down)
visited[down] = visited[c] + 1
else:
print('use the stairs')
return
if __name__ == '__main__':
F, S, G, U, D = map(int, input().split())
# F: ๊ฑด๋ฌผ ์ธต์, S: ๊ฐํธ ์์น, G: ํ์ฌ ์์น
bfs()
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/5014
๋ฌธ์
๊ฐํธ๋ ์ฝ๋ฉ ๊ต์ก์ ํ๋ ์คํํธ์ ์คํํธ๋งํฌ์ ์ง์ํ๋ค. ์ค๋์ ๊ฐํธ์ ๋ฉด์ ๋ ์ด๋ค. ํ์ง๋ง, ๋ฆ์ ์ ์ ๊ฐํธ๋ ์คํํธ๋งํฌ๊ฐ ์๋ ๊ฑด๋ฌผ์ ๋ฆ๊ฒ ๋์ฐฉํ๊ณ ๋ง์๋ค.
์คํํธ๋งํฌ๋ ์ด 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"๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์
๊ฐํธ๋ ์ฝ๋ฉ ๊ต์ก์ ํ๋ ์คํํธ์ ์คํํธ๋งํฌ์ ์ง์ํ๋ค. ์ค๋์ ๊ฐํธ์ ๋ฉด์ ๋ ์ด๋ค. ํ์ง๋ง, ๋ฆ์ ์ ์ ๊ฐํธ๋ ์คํํธ๋งํฌ๊ฐ ์๋ ๊ฑด๋ฌผ์ ๋ฆ๊ฒ ๋์ฐฉํ๊ณ ๋ง์๋ค.
์คํํธ๋งํฌ๋ ์ด 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"๋ฅผ ์ถ๋ ฅํ๋ค.
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค - 1011. Fly me to the Alpha Centauri (0) | 2020.09.26 |
---|---|
[python] ํ๋ก๊ทธ๋๋จธ์ค - ํ์ ํฐํธ๋ฆฌ๊ธฐ(์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ1) (0) | 2020.09.25 |
[python] ๋ฐฑ์ค - 3055. ํ์ถ (0) | 2020.09.23 |
[python] ๋ฐฑ์ค - 1916. ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (0) | 2020.09.23 |
[python] ๋ฐฑ์ค - 2225. ํฉ๋ถํด (0) | 2020.09.22 |