๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[๋ฐฑ์ค€]5014๋ฒˆ: ์Šคํƒ€ํŠธ๋งํฌ

by syLim___ 2023. 7. 23.
728x90

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

 

5014๋ฒˆ: ์Šคํƒ€ํŠธ๋งํฌ

์ฒซ์งธ ์ค„์— F, S, G, U, D๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) ๊ฑด๋ฌผ์€ 1์ธต๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ , ๊ฐ€์žฅ ๋†’์€ ์ธต์€ F์ธต์ด๋‹ค.

www.acmicpc.net


 

bfs๋กœ ํ’€์—ˆ๋‹ค.

์ตœ์ดˆ ์ขŒํ‘œ๋ฅผ ํ์— ๋„ฃ๊ณ , ํ์—์„œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ์œ„ ๋˜๋Š” ์•„๋ž˜ ์ธต์˜ ๋ฒ”์œ„์™€ ๋ฐฉ๋ฌธ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜์˜€๋‹ค.

 

์ตœ์ดˆ์˜ ์ขŒํ‘œ s์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š์•„์„œ ์ž๊พธ ์˜ค๋‹ต์ด ๋‚˜์™”์—ˆ๋‹ค.

 


 

python

from collections import deque

f, s, g, u, d = map(int, input().split())

elevator = [0 for _ in range(f+1)]
q = deque()
q.append(s)
elevator[s] = 1 # ์ตœ์ดˆ์˜ ์ขŒํ‘œ ๋ฐฉ๋ฌธ์ฒดํฌ

if s == g:
  print(0)
  exit(0)

while q:
  cur = q.popleft()
  if cur == g:
    break
  for i in (u, -d):
    next = cur + i
    if 0 < next <= f and elevator[next] == 0:
      elevator[next] = elevator[cur] + 1
      q.append(next)

if elevator[g] == 0:
  print("use the stairs")
else:
  print(elevator[g]-1)
728x90