๐Ÿค–/๋ฐฑ์ค€

๋ฐฑ์ค€ 2606: ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ (Python)

sssbin 2022. 2. 3. 17:12

 

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

 

2206๋ฒˆ: ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ

Nร—M์˜ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๋Š” ๋งต์ด ์žˆ๋‹ค. ๋งต์—์„œ 0์€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ด๊ณ , 1์€ ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ๋ฒฝ์ด ์žˆ๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹น์‹ ์€ (1, 1)์—์„œ (N, M)์˜ ์œ„์น˜๊นŒ์ง€ ์ด๋™ํ•˜๋ ค ํ•˜๋Š”๋ฐ, ์ด๋•Œ ์ตœ๋‹จ ๊ฒฝ๋กœ

www.acmicpc.net

 

from collections import deque

n, m = map(int, input().split())
list = [[] for _ in range(n)]

for i in range(n):
    data = input()
    for j in range(m):
        list[i].append(int(data[j]))

def bfs(x, y, z):
    dx = [1, -1, 0, 0]
    dy = [0, 0, 1, -1]

    queue = deque()
    queue.append([x, y, z])

    visited = [[[0] * 2 for _ in range(m)] for _ in range(n)]
    visited[x][y][z] = 1

    while queue:
        qx, qy, qz = queue.popleft()

        if qx == n-1 and qy == m-1:
            return visited[qx][qy][qz]

        for i in range(4):
            mx = qx + dx[i]
            my = qy + dy[i]

            if mx < 0 or mx >= n or my < 0 or my >= m:
                continue

            if list[mx][my] == 1 and qz == 1:
                visited[mx][my][0] = visited[qx][qy][1] + 1
                queue.append([mx, my, 0])
            elif list[mx][my] == 0 and visited[mx][my][qz] == 0:
                visited[mx][my][qz] = visited[qx][qy][qz] + 1
                queue.append([mx, my, qz])

    return -1

print(bfs(0, 0, 1))

 

์ฒ˜์Œ์—” flag ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋‘ฌ์„œ ๋ฒฝ์„ ๋šซ์œผ๋ฉด flag ๊ฐ’์„ ๋ณ€ํ•˜๊ฒŒ ํ•ด์„œ ๋”์ด์ƒ ๋ฒฝ์„ ๋ชป ๋šซ๊ฒŒ ํ–ˆ๋‹ค

๊ทผ๋ฐ ๋‹จ์ˆœํžˆ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธธ์ด ์—†๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฒฝ์„ ๋šซ์—ˆ์„ ๋•Œ ๋‹ต์„ ๋ชป ์ฐพ๊ฒŒ ๋จ

๊ทธ๋ž˜์„œ ๊ณ ๋ฏผ์„ ํ•ด๋ณด๋‹ค๊ฐ€ ์ง„์งœ ๋„์ €~~~~ํžˆ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๊ตฌ๊ธ€๋งํ•จ.....

3์ฐจ์› ๋ฐฐ์—ด์„ ์จ์•ผ ํ•œ๋‹ค๊ธธ๋ž˜ ๋˜ ์—ด์‹ฌํžˆ ๋จธ๋ฆฌ๋ฅผ ์ฅ๋œฏ์—ˆ๋‹ค

์ „ ์™œ ์ด๋ ‡๊ฒŒ ๋ฉ์ฒญํ•œ๊ฑฐ์ฃ ? ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ€์š”,,,,,,,,,,

 

visited ๋ฐฐ์—ด์„ 3์ฐจ์›์œผ๋กœ ๋‘๊ณ  x, y๋Š” ๊ฐ ๋งต์˜ ์ขŒํ‘œ์ด๊ณ 

์—ฌ๊ธฐ์„œ z๊ฐ€ 1์ด๋ฉด ๋ฒฝ์„ ๋šซ์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ด๊ณ  0์ด๋ฉด ๋ฒฝ์„ ์ด๋ฏธ ํ•œ๋ฒˆ ๋šซ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋šซ์„ ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ด๋‹ค. (flag ์—ญํ• ์„ ํ•จ)

bfs ๋Œ๋ฆฌ๋ฉด์„œ ๋ฒฝ์„ ๋งŒ๋‚ฌ๊ณ , ๋ฒฝ์„ ๋šซ์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ด๋ฉด ๋šซ์Œ ๊ทธ๋ฆฌ๊ณ  visited + 1

๊ธธ์ด ์žˆ๊ณ (๋ฒฝ ์•„๋‹˜), ์•„์ง ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋Š” ๊ธธ์ด๋ฉด visited + 1

 

๊ฒจ์šฐ๊ฒจ์šฐ ์ดํ•ดํ–ˆ์ง€๋งŒ ์•„์ง ํ—ท๊ฐˆ๋ฆฐ๋‹ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ข€๋” ๋œฏ์–ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค

 

๋งž์€๊ฒŒ ๋งž์€๊ฒŒ ์•„๋‹˜......... python3 ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ ค์„œ pypy3๋กœ๋„ ๋Œ๋ ค๋ดค๋‹ค