๐งฉ๋ฌธ์ ํด์
F = ์คํํธ๋งํฌ ๊ฑด๋ฌผ ์ธต์ ์ด ๊ณ์
S = ํ์ฌ ๊ฐํธ์ ์์น
G = ์คํํธ๋งํฌ์ ์์น
U = ์๋ก ์ฌ๋ผ๊ฐ๋ ์๋ ๋ฒ ์ดํฐ ์ธต์ ๊ฐ๊ฒฉ
D = ์๋๋ก ๋ด๋ ค๊ฐ๋ ์๋ ๋ฒ ์ดํฐ ์ธต์ ๊ฐ๊ฒฉ
์ ์ฌํญ๋ค์ด ์ฃผ์ด์ก์ ๋, ํ์ฌ ๊ฐํธ์ ์์น์์ ์คํํธ๋งํฌ์ ์์น๋ก ์๋ ๋ฒ ์ดํฐ๋ก ๊ฐ๋ ค ํ ๋, ๋๋ฅธ ๋ฒํผ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค. ๋ง์ฝ ๋๋ฌํ ์ ์๋ค๋ฉด, ๊ณ๋จ ์ด์ฉํ๋ผ๋ ๋ฌธ์ฅ์ ์ถ๋ ฅํ๋ค.
๋ชจ๋ ์ธต์ ๋์๋ค๋ ํ์๊ฐ ์๊ณ ๋ชฉํ์ธต์ ๋๋ฌํ๋ฉด ์๋ ๋ฒ ์ดํฐ๋ฅผ ๋ฉ์ถ๋ฉด ๋๋๊น BFS๊ฐ ํจ์จ์ ์ด๋ค.
๐ ํ์ด
BFS๋ก ํ์๋ค.
์ด๋ํ ์ ์๋ ์ธต์ [ํ์ฌ ์์น + U, ํ์ฌ ์์น -D] ๋ฅผ ํตํด ์ ์ถํ์๊ณ , ์ด ๋ฐ์ดํฐ๊ฐ F ์์ ์๊ณ , ๋ฐฉ๋ฌธํ ์ ์ด ์๋ค๋ฉด, ๊ทธ ์ธต์ผ๋ก ๋ฐฉ๋ฌธํ์๋ค.
๐ป ์ฝ๋
from collections import deque
f,s,g,u,d = map(int, input().split())
# f= ์ด ์ธต์ ๊ณ์
# s= ๊ฐํธ์ ์์น์ธต
# g= ์คํํธ๋งํฌ์ ์์น
# u= ์๋ก ๊ฐ์ ์๋ ์ธต
# d= ์๋๋ก ๊ฐ ์ ์๋ ์ธต
# ๊ฐ๋ฅํ๋ค๋ฉด ๋๋ฅธ ๋ฒํผ ์ต์๊ฐ
# ๋ถ๊ฐํ๋ค๋ฉด use the stairs
visited = [False for i in range(f+1)] # ๋ฐฉ๋ฌธ์ฒดํฌ
def bfs():
queue = deque()
queue.append((s, 0)) # ์์์์น์ ์นด์ดํธ ์ฒดํฌ
while queue: # ํ๊ฐ ๋น๋๊น์ง
now, cnt = queue.popleft()
candi = [now+u, now-d] # ์ด๋๊ฐ๋ฅ ์์น
for i in candi:
if 0 < i <= f: # f ์์ ์๋ค๋ฉด
if not visited[i]: # ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
visited[i] = True # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
queue.append((i, cnt+1)) # ํ์ ์ฝ์
if i == g: # ๋ง์ฝ ํ์ฌ ์ด๋ ์์น๊ฐ ์คํํธ๋งํฌ์ ์์น๋ผ๋ฉด
return cnt+1 # ์ด๋ํ์ ์ถ๋ ฅ
return "use the stairs" # ํ๊ฐ ๋น๋๊น์ง ์ฐพ์ง ๋ชปํ๋ค๋ฉด, ๊ณ๋จ ์ด์ฉํ์์ค.
if s == g: # ์์๋ถํฐ ๊ฐํธ์ ์์น๊ฐ ์คํํธ๋งํฌ์ ์์น๋ผ๋ฉด ์ด๋์ํจ
print(0)
else: # ์ด๋์์ ํจ์ ํธ์ถ
visited[s] = True # ํ์ฌ ์์น ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
print(bfs())
๐ ๋ฌธ์ ๋งํฌ : ์คํํธ๋งํฌ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1697๋ฒ: ์จ๋ฐ๊ผญ์ง - ํ์ด์ฌ (0) | 2022.06.02 |
---|---|
[๋ฐฑ์ค] 2775๋ฒ: ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ - ํ์ด์ฌ (0) | 2022.06.02 |
[๋ฐฑ์ค] 7562๋ฒ: ๋์ดํธ์ ์ด๋ - ํ์ด์ฌ (0) | 2022.05.31 |
[๋ฐฑ์ค] 2573๋ฒ: ๋น์ฐ - ํ์ด์ฌ (0) | 2022.05.30 |
[๋ฐฑ์ค] 2502๋ฒ: ๋ก ๋จน๋ ํธ๋์ด (0) | 2022.05.26 |