[Baekjoon/๐Ÿฅ‡โ…ข] 2206: ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐโญ๏ธ

3 ๋ถ„ ์†Œ์š”

๐Ÿ™‹โ€โ™€๏ธ ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ

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

๋งŒ์•ฝ์— ์ด๋™ํ•˜๋Š” ๋„์ค‘์— ํ•œ ๊ฐœ์˜ ๋ฒฝ์„ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ข€ ๋” ๊ฒฝ๋กœ๊ฐ€ ์งง์•„์ง„๋‹ค๋ฉด, ๋ฒฝ์„ ํ•œ ๊ฐœ ๊นŒ์ง€ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜์—ฌ๋„ ๋œ๋‹ค.

ํ•œ ์นธ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ์นธ์ด๋‹ค.

๋งต์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•ด ๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ™‹โ€โ™€๏ธ ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(1 โ‰ค N โ‰ค 1,000), M(1 โ‰ค M โ‰ค 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์— M๊ฐœ์˜ ์ˆซ์ž๋กœ ๋งต์ด ์ฃผ์–ด์ง„๋‹ค. (1, 1)๊ณผ (N, M)์€ ํ•ญ์ƒ 0์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž.

๐Ÿ™‹โ€โ™€๏ธ ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ‘ฉโ€๐Ÿ’ป ์–ด๋–ป๊ฒŒ ํ’€์–ด๋‚˜๊ฐˆ๊นŒ?

์šฐ์„  ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰, ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— bfs๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜ bfs ๋ฌธ์ œ์—์„œ ์กฐ๊ฑด์ด ์ถ”๊ฐ€๋œ ๋ฌธ์ œ์ด๋‹ค.

๋งŒ์•ฝ์— ์ด๋™ํ•˜๋Š” ๋„์ค‘์— ํ•œ ๊ฐœ์˜ ๋ฒฝ์„ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ข€ ๋” ๊ฒฝ๋กœ๊ฐ€ ์งง์•„์ง„๋‹ค๋ฉด, ๋ฒฝ์„ ํ•œ ๊ฐœ ๊นŒ์ง€ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜์—ฌ๋„ ๋œ๋‹ค.

์ฒ˜์Œ์—๋Š” ๋ฒฝ์˜ ์ขŒํ‘œ๋ฅผ ๋ชจ๋‘ ๊ธฐ๋กํ•ด ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ์—์„œ ๋šซ์—ˆ์„ ๋•Œ bfs ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœํ•˜์˜€๋‹ค. ๋‹น์—ฐํžˆ ๊ฒฐ๊ณผ๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ์˜€๋‹ค!

๊ฐ„๋‹จํ•œ ์กฐ๊ฑด ํ•˜๋‚˜๋งŒ ์ถ”๊ฐ€๋œ ๊ฒƒ์ธ๋ฐ ๊ตฌํ˜„์— ๊ฝค ์• ๋ฅผ ๋จน์—ˆ๋‹ค.


๋‹จ ํ•œ ๋ฒˆ์˜ bfs ํ˜ธ์ถœ์„ ํ†ตํ•ด ๋ฒฝ์„ ๋ถ€์ˆ˜๋Š” ๊ฒฝ์šฐ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์€ ๋น„๊ต์  ๊ฐ„๋‹จํ–ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋ฒฝ์„ ๋ถ€์ˆœ ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๋ฉด ๋œ๋‹ค.

๋ฒฝ์„ 1๋ฒˆ์ด๋ผ๋„ ๋ถ€์ˆœ ๊ฒฝ์šฐ์—๋Š” ์ดํ›„ ๋ฒฝ์„ ๋งŒ๋‚ฌ์„ ๋–„ ๊ฒฝ๋กœ๊ฐ€ ๋ง‰ํžˆ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฒฝ์„ ํ•œ ๋ฒˆ๋„ ๋ถ€์ˆ˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ดํ›„ ๋ฒฝ์„ ๋งŒ๋‚ฌ์„ ๋•Œ ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ๋šซ๊ณ  bfs๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค!

๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์—์„œ ํ™•์ธํ•ด๋ณด์ž!!


๐Ÿ‘ฉโ€๐Ÿ’ป Code: ์˜ค๋‹ต

import sys
from collections import deque
INF = sys.maxsize

def bfs():
    global answer
    q = deque([(1, 0, 0, False)])
    visited = [[0]*m for _ in range(n)]
    visited[0][0] = 1

    while q:
        dis, x, y, check = q.popleft()

        if x == n-1 and y == m-1:
            answer = min(dis, answer)

        for i in range(4):
            nx = x+dx[i]
            ny = y+dy[i]
            if 0<=nx<n and 0<=ny<m:
                if graph[nx][ny] == "0": # ๋ฒฝ์ด ์•„๋‹ ๊ฒฝ์šฐ
                    if visited[nx][ny] == 0:
                        visited[nx][ny] = 1
                        q.append((dis+1, nx, ny, check))
                else: # ๋ฒฝ์ผ ๊ฒฝ์šฐ
                    if check == False:
                        q.append((dis+1, nx, ny, True))
    
    return answer

n, m = map(int, sys.stdin.readline().split())
graph = [list(sys.stdin.readline().rstrip()) for _ in range(n)]
walls = []

dx = [-1, 0, 1, 0]
dy = [0, -1, 0, 1]

answer = INF
bfs()
if answer == INF:
    print(-1)
else:
    print(answer)

ํ•˜์ง€๋งŒ ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์ œ๋ชฉ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์˜ค๋‹ต์ธ ์ฝ”๋“œ์ด๋‹ค!

๋„๋Œ€์ฒด ์™œ????๐Ÿซ 

์–ด๋Š ๋ถ€๋ถ„์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ๋ชปํ–ˆ์„๊นŒ ๊ณ„์† ๊ณ ๋ฏผํ•˜๋˜ ์ค‘, ๋‹ค๋ฅธ ๋ถ„์ด ํ•œ ์งˆ๋ฌธ ๋•๋ถ„์— ์›์ธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค..ใ…Žใ…Ž


๐Ÿ‘ฉโ€๐Ÿ’ป Code1: ์˜ˆ์™ธ ์ผ€์ด์Šค

์œ„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ์˜ ์˜ˆ์™ธ ์ผ€์ด์Šค๋ฅผ ๊ฐ€์ง„๋‹ค.

4 6
010100
010110
000110
111110
  • (0,1)์—์„œ ๋ฒฝ์„ ๋ถ€์ˆ˜๊ณ  ๊ฐ„ ๊ฒฝ์šฐ
    • (0, 2)๋Š” ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋œ๋‹ค.
    • (0, 3)์—์„œ ๋‹ค์‹œ ๋ฒฝ์„ ๋งŒ๋‚˜ ๊ฒฝ๋กœ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.
  • (0, 1)์—์„œ ๋ฒฝ์„ ๋ถ€์ˆ˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
    • U์ž ํ˜•ํƒœ๋กœ ๋Œ๊ณ  ๋Œ์•„ (0, 2)๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋œ๋‹ค.
    • ํ•˜์ง€๋งŒ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฏธ ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฒฝ๋กœ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค.โญ๏ธ

์ฆ‰, ๋ฒฝ์„ ๋ถ€์ˆœ ๊ฒฝ์šฐ์™€ ๋ถ€์ˆ˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ๋ถ„๋ฆฌํ•ด ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹จ์ˆœํ•˜๋‹ค!


๋ฒฝ์„ ๋ถ€์ˆœ ๊ฒฝ์šฐ์™€ ๋ถ€์ˆ˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์˜ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ๋ฒฝ์„ ๋ถ€์ˆœ ์ƒํƒœ์—์„œ (0,2)์— ๋„์ฐฉํ•œ ๊ฒฝ์šฐ, (0,3)์—์„œ ๋ฒฝ์„ ๋งŒ๋‚˜ ๊ฒฝ๋กœ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค.
  • ๋ฒฝ์„ ๋ถ€์ˆ˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ (0, 2)์— ๋„์ฐฉํ•œ ๊ฒฝ์šฐ, (0, 3)์—์„œ ๋ฒฝ์„ ๋งŒ๋‚˜๋”๋ผ๋„ ๋ฒฝ์„ ๋ถ€์ˆ˜๊ณ  ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ ์ด๋ฅผ ์ ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด์ž!


๐Ÿ‘ฉโ€๐Ÿ’ป Code: ์ •๋‹ต

import sys
from collections import deque
INF = sys.maxsize

def bfs():
    global answer
    q = deque([(1, 0, 0, False)])
    # ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ๋ถ„๋ฆฌ!
    visited1 = [[0]*m for _ in range(n)]
    visited2 = [[0]*m for _ in range(n)]
    visited1[0][0] = 1

    while q:
        dis, x, y, check = q.popleft()

        if x == n-1 and y == m-1:
            return dis

        for i in range(4):
            nx = x+dx[i]
            ny = y+dy[i]
            if 0<=nx<n and 0<=ny<m:
                if graph[nx][ny] == "0": # ๋ฒฝ์ด ์•„๋‹ ๊ฒฝ์šฐ
                    if not check: # ๋ฒฝ์„ ํ—ˆ๋ฌผ์ง€ ์•Š๊ณ  ์ง€๋‚˜๊ฐ€๋Š” ๊ฒฝ์šฐ
                        if visited1[nx][ny] == 0:
                            visited1[nx][ny] = 1
                            q.append((dis+1, nx, ny, check))
                    else: # ๋ฒฝ์„ ํ—ˆ๋ฌผ๊ณ  ์ง€๋‚˜๊ฐ€๋Š” ๊ฒฝ์šฐ
                        if visited2[nx][ny] == 0:
                            visited2[nx][ny] = 1
                            q.append((dis+1, nx, ny, check))
                else: # ๋ฒฝ์ผ ๊ฒฝ์šฐ
                    if check == False:
                        q.append((dis+1, nx, ny, True))
    
    return -1

n, m = map(int, sys.stdin.readline().split())
graph = [list(sys.stdin.readline().rstrip()) for _ in range(n)]
walls = []

dx = [-1, 0, 1, 0]
dy = [0, -1, 0, 1]

print(bfs())

bfs ๋ฌธ์ œ๋ผ๊ณ  ๋‹ค ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๊ตฌ๋‚˜๋ฅผ ํ™•์‹คํžˆ ๋Š๋‚€ ๋ฌธ์ œ์˜€๋‹ค. ๋‹ค๋ฅธ ์กฐ๊ฑด์ด ๋ถ™์€ bfs ๋ฌธ์ œ๋„ ํ•ด๋‹น ๋ฌธ์ œ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•ด ์ž˜ ํ’€์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ~

๐Ÿ“ ์ฐธ๊ณ  ์ž๋ฃŒ

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