[파이썬] 백준 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])
코멘트
- 객체 회전시키는데 인덱스 이따구로 주면 너무 화가나버림
'Algorithm > Graph' 카테고리의 다른 글
[파이썬] 백준 23286 : 허들 넘기 (골드3) (0) | 2025.01.21 |
---|---|
[파이썬] 백준 12886 : 돌 그룹 (12886) (0) | 2025.01.13 |
[파이썬] 백준 2917 : 늑대사냥꾼 (골드2) (0) | 2025.01.11 |
[파이썬] 백준 2211 : 네트워크 복구 (골드2) (0) | 2025.01.09 |
[파이썬] 백준 15809 : 전국시대 (골드4) (0) | 2025.01.06 |
[파이썬] 백준 1956 : 운동 (골드4) (0) | 2025.01.05 |
[파이썬] 백준 1238 : 파티 (골드3) (0) | 2025.01.04 |
댓글