[BOJ][๐ŸŸก5][๋ฐฑ์ค€#05014] ์Šคํƒ€ํŠธ๋งํฌ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #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โ€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 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 ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ