๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[BAEKJOON python] 5014_์Šคํƒ€ํŠธ๋งํฌ ๋ณธ๋ฌธ

๐Ÿฆฅ ์ฝ”ํ…Œ/BAEKJOON

[BAEKJOON python] 5014_์Šคํƒ€ํŠธ๋งํฌ

์ง•์ง•์•ŒํŒŒ์นด 2022. 10. 8. 22:44
728x90
๋ฐ˜์‘ํ˜•
์˜ค๋Š˜์€ ๊ฐ•ํ˜ธ์˜ ๋ฉด์ ‘๋‚ ์ด๋‹ค.
๋Šฆ์ž ์„ ์ž” ๊ฐ•ํ˜ธ๋Š” ์Šคํƒ€ํŠธ๋งํฌ๊ฐ€ ์žˆ๋Š” ๊ฑด๋ฌผ์— ๋Šฆ๊ฒŒ ๋„์ฐฉํ•˜๊ณ  ๋ง์•˜๋‹ค.

์Šคํƒ€ํŠธ๋งํฌ๋Š” ์ด 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) BFS
from collections import deque

# ๊ฑด๋ฌผ๋†’์ด, ๊ฐ•ํ˜ธ์œ„์น˜, ์‚ฌ๋ฌด์‹ค์œ„์น˜, ์˜ฌ๋ผ๊ฐ€์•ผ๋˜๋Š” ์ธต, ๋‚ด๋ ค๊ฐ€์•ผ๋˜๋Š” ์ธต
F, S, G, U, D = map(int, input().split())

def bfs(s, g) :
    visited = [-1] * (F + 1)

    # ํ˜„์žฌ ๊ฐ•ํ˜ธ ์œ„์น˜
    q = deque([s])
    visited[s] = 0

    while q :
        x = q.popleft()

        # ์‚ฌ๋ฌด์‹ค์— ๋„์ฐฉ
        if x == g :
            return visited[x]
        
        UP = x + U
        DOWN = x - D

        if (UP <= F) and (visited[UP] == -1) :
            q.append(UP)
            visited[UP] = visited[x] + 1

        if (DOWN > 0) and (visited[DOWN] == -1) :
            q.append(DOWN)
            visited[DOWN] = visited[x] + 1

    return "use the stairs"

print(bfs(S, G))

# input
# 10 1 10 2 1
# output
# 6

# input
# 100 2 1 1 0
# output
# use the staris
728x90
๋ฐ˜์‘ํ˜•
Comments