๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Coding Test/Algorithms

[๋ฐฑ์ค€] 16928. ๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„/Python - Gold5

by The Future Engineer, Lucy 2025. 2. 10.
728x90
๋ฐ˜์‘ํ˜•

โ“๋ฌธ์ œ

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

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 34968 KB, ์‹œ๊ฐ„: 60 ms

๋ถ„๋ฅ˜

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰, ๊ทธ๋ž˜ํ”„ ์ด๋ก , ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

 

๋ฌธ์ œ ์„ค๋ช…

๋ฑ€๊ณผ ์‚ฌ๋‹ค๋ฆฌ ๊ฒŒ์ž„์„ ์ฆ๊ฒจ ํ•˜๋Š” ํ๋ธŒ๋Ÿฌ๋ฒ„๋Š” ์–ด๋Š ๋‚  ๊ถ๊ธˆํ•œ ์ ์ด ์ƒ๊ฒผ๋‹ค.

์ฃผ์‚ฌ์œ„๋ฅผ ์กฐ์ž‘ํ•ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ˆ˜๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ตœ์†Œ ๋ช‡ ๋ฒˆ๋งŒ์— ๋„์ฐฉ์ ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๊ฒŒ์ž„์€ ์ •์œก๋ฉด์ฒด ์ฃผ์‚ฌ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฃผ์‚ฌ์œ„์˜ ๊ฐ ๋ฉด์—๋Š” 1๋ถ€ํ„ฐ 6๊นŒ์ง€ ์ˆ˜๊ฐ€ ํ•˜๋‚˜์”ฉ ์ ํ˜€์žˆ๋‹ค. ๊ฒŒ์ž„์€ ํฌ๊ธฐ๊ฐ€ 10×10์ด๊ณ , ์ด 100๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ๋ณด๋“œํŒ์—์„œ ์ง„ํ–‰๋œ๋‹ค. ๋ณด๋“œํŒ์—๋Š” 1๋ถ€ํ„ฐ 100๊นŒ์ง€ ์ˆ˜๊ฐ€ ํ•˜๋‚˜์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์ ํ˜€์ ธ ์žˆ๋‹ค.

ํ”Œ๋ ˆ์ด์–ด๋Š” ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค ๋‚˜์˜จ ์ˆ˜๋งŒํผ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”Œ๋ ˆ์ด์–ด๊ฐ€ i๋ฒˆ ์นธ์— ์žˆ๊ณ , ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค ๋‚˜์˜จ ์ˆ˜๊ฐ€ 4๋ผ๋ฉด, i+4๋ฒˆ ์นธ์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ฆฐ ๊ฒฐ๊ณผ๊ฐ€ 100๋ฒˆ ์นธ์„ ๋„˜์–ด๊ฐ„๋‹ค๋ฉด ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค. ๋„์ฐฉํ•œ ์นธ์ด ์‚ฌ๋‹ค๋ฆฌ๋ฉด, ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ํƒ€๊ณ  ์œ„๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค. ๋ฑ€์ด ์žˆ๋Š” ์นธ์— ๋„์ฐฉํ•˜๋ฉด, ๋ฑ€์„ ๋”ฐ๋ผ์„œ ๋‚ด๋ ค๊ฐ€๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์‚ฌ๋‹ค๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ด๋™ํ•œ ์นธ์˜ ๋ฒˆํ˜ธ๋Š” ์›๋ž˜ ์žˆ๋˜ ์นธ์˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ํฌ๊ณ , ๋ฑ€์„ ์ด์šฉํ•ด ์ด๋™ํ•œ ์นธ์˜ ๋ฒˆํ˜ธ๋Š” ์›๋ž˜ ์žˆ๋˜ ์นธ์˜ ๋ฒˆํ˜ธ๋ณด๋‹ค ์ž‘์•„์ง„๋‹ค.

๊ฒŒ์ž„์˜ ๋ชฉํ‘œ๋Š” 1๋ฒˆ ์นธ์—์„œ ์‹œ์ž‘ํ•ด์„œ 100๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฒŒ์ž„ํŒ์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, 100๋ฒˆ ์นธ์— ๋„์ฐฉํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค์•ผ ํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.

โœ๐Ÿปํ’€์ด

์ด ๋ฌธ์ œ๋Š” BFS๋กœ ํ’€๋ฉด ๋œ๋‹ค.

์‚ฌ๋‹ค๋ฆฌ์™€ ๋ฑ€์„ ์‚ฌ์ „ํ˜•์œผ๋กœ ์ €์žฅํ•œ๋‹ค. ์‚ฌ์ „ํ˜•์œผ๋กœ ์ €์žฅํ•˜๋Š” ํŽธ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ถœ๋ฐœ์ง€๊ฐ€ 1์ด๋ผ๊ณ  ํ•˜์˜€์œผ๋ฏ€๋กœ ํ์— 1์„ ๋„ฃ์–ด์ฃผ๊ณ  ๊ทธ ๋’ค์—๋Š” ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ฆฌ๋ฉด ๋œ๋‹ค. cnt ๊ฐ’์„ ๊ฐ™์ด ํ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋กœ ์‹คํŒจํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” while q ์•ˆ์— q ๊ธธ์ด ๋งŒํผ ๋ฐ˜๋ณตํ•œ ํ›„ cnt + 1์„ ํ•œ๋‹ค.
1์ผ ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋Š” 2, 3, 4, 5, 6, 7 ์ด๋‹ค. ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ฆฐ ํšŸ์ˆ˜๋Š” ์–ด๋Š ์œ„์น˜๋“  ๊ฒฐ๊ตญ 1์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด๋ฅผ ํ์— ์ €์žฅํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค. ๋ฐ˜๋ณต๋ฌธ์„ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œ 1 ์ฆ๊ฐ€ํ•˜๋Š” ํŽธ์ด ๋” ๋‚ซ๋‹ค.

์œ„ ๋ฐฉ์‹์„ ๋ฐ˜๋ณตํ•˜์—ฌ 100์— ๋„์ฐฉํ•˜๋ฉด ๊ทธ ๋•Œ์˜ cnt๋ฅผ ์ถœ๋ ฅํ•œ ํ›„ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด์„œ ๋๋‚ธ๋‹ค. 

๐Ÿ’ป์ฝ”๋“œ

์ฒ˜์Œ ์‹œ๋„ํ•œ ์ฝ”๋“œ

import sys
from collections import deque

input = sys.stdin.readline

N, M = map(int, input().split()) # N -> ์‚ฌ๋‹ค๋ฆฌ ์ˆ˜, M -> ๋ฑ€ ์ˆ˜
ladders = [list(map(int, input().split())) for _ in range(N)]
snakes = [list(map(int, input().split())) for _ in range(M)]

def bfs():
    global res
    q = deque()
    q.append((1, 0))

    while q:
        cur, cnt = q.popleft()
        for i in range(N):
            if ladders[i][0] == cur:
                cur = ladders[i][1]

        for i in range(M):
            if snakes[i][0] == cur:
                cur = snakes[i][1]

        for i in range(1, 7):
            nx = cur + i
            if nx == 100:
                res = cnt + 1
                return

            if nx < 100:
                q.append((nx, cnt + 1))
                res = cnt + 1


res = 0
bfs()
print(res)

โžก๏ธ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋กœ ์‹คํŒจ

์ •๋‹ต ์ฝ”๋“œ

import sys
from collections import deque

input = sys.stdin.readline

N, M = map(int, input().split())
ladders = {}
for _ in range(N):
    x, y = map(int, input().split())
    ladders[x] = y
snakes = {}
for _ in range(M):
    x, y = map(int, input().split())
    snakes[x] = y

def dfs():
    visited = [0] * 101
    visited[1] = 1
    q = deque()
    q.append(1)
    cnt = 0
    while q:
        l = len(q)
        for _ in range(l):
            cur = q.popleft()
            if cur == 100:
                print(cnt)
                return

            for i in range(1, 7):
                nx = cur + i
                if nx <= 100 and not visited[nx]:
                    visited[nx] = 1
                    if nx in ladders.keys():
                        visited[ladders[nx]] = 1
                        q.append(ladders[nx])
                    elif nx in snakes.keys():
                        visited[snakes[nx]] = 1
                        q.append(snakes[nx])
                    else:
                        q.append(nx)

        cnt += 1

dfs()

๐Ÿ“ํ›„๊ธฐ

๋ญ”๊ฐ€ ๊ทธ๋ƒฅ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘ธ๋Š” ๊ฒŒ ๋‹น์—ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์•ž์œผ๋กœ python์œผ๋กœ ํ’€ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ฏผ์„ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•