Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 5014. ์Šคํƒ€ํŠธ๋งํฌ

deo2kim 2020. 9. 24. 08:35
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  • 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

 

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

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

www.acmicpc.net


๋ฌธ์ œ

๊ฐ•ํ˜ธ๋Š” ์ฝ”๋”ฉ ๊ต์œก์„ ํ•˜๋Š” ์Šคํƒ€ํŠธ์—… ์Šคํƒ€ํŠธ๋งํฌ์— ์ง€์›ํ–ˆ๋‹ค. ์˜ค๋Š˜์€ ๊ฐ•ํ˜ธ์˜ ๋ฉด์ ‘๋‚ ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋Šฆ์ž ์„ ์ž” ๊ฐ•ํ˜ธ๋Š” ์Šคํƒ€ํŠธ๋งํฌ๊ฐ€ ์žˆ๋Š” ๊ฑด๋ฌผ์— ๋Šฆ๊ฒŒ ๋„์ฐฉํ•˜๊ณ  ๋ง์•˜๋‹ค.

์Šคํƒ€ํŠธ๋งํฌ๋Š” ์ด 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"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•