본문 바로가기
Algorithm/Graph

[파이썬] 백준 1726 : 로봇 (골드3)

by 베짱이28호 2025. 1. 10.

[파이썬] 백준 1726 : 로봇 (골드3)


풀이

방향성 생각

  • H * W * 4방향으로 visit 배열 생성하기

 


전체코드

from collections import deque
import sys
input = lambda : sys.stdin.readline().rstrip()

H,W = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(H)]

# 인덱스 1씩 빼주기
sy,sx,sd = map(lambda x:int(x)-1,input().split())
ey,ex,ed = map(lambda x:int(x)-1,input().split())

# 0123(동서남북) -> 0123(동남서북)
dire = [(1,0),(0,1),(-1,0),(0,-1)]
cvt_dire = {0:0,1:2,2:1,3:3}
inside = lambda x,y: 0<=x<W and 0<=y<H

V = [[[-1]*W for _ in range(H)] for _ in range(4)]
V[cvt_dire[sd]][sy][sx] = 0

Q = deque([(sx,sy,cvt_dire[sd])])
while Q:

    x,y,d = Q.popleft()

    # 방향 바꾸는 경우 : 방문하지 않았으면 방문
    for i in [1,-1]:
        nd = (d+i)%4
        if V[nd][y][x] == -1:
            V[nd][y][x] = V[d][y][x] + 1
            Q.append((x,y,nd))

    # 전진하는 경우 : 장애물만 없으면 된다. 장애물 만나면 break
    dx,dy = dire[d]
    for k in range(1,4):
        nx,ny = x+dx*k, y+dy*k
        if not inside(nx,ny) or arr[ny][nx]:
            break
        if V[d][ny][nx] == -1:
            V[d][ny][nx] = V[d][y][x] + 1
            Q.append((nx,ny,d))

print(V[cvt_dire[ed]][ey][ex])

코멘트

  • 객체 회전시키는데 인덱스 이따구로 주면 너무 화가나버림

댓글