728x90
https://www.acmicpc.net/problem/14503
2차원배열에서의 회전할때 규칙과, 후진할 때 칸의 이동을 찾으면 풀 수 있는 시뮬레이션 문제이다
n, m = map(int, input().split())
r, c, d = map(int, input().split())
array = []
visited = [[False]*m for _ in range(n)] # 청소한 여부 기록
visited[r][c] = True # 방문처리
count = 1
dx = [-1, 0, 1, 0] # 북 동 남 서
dy = [0, 1, 0, -1]
for _ in range(n):
array.append(list(map(int, input().split())))
# 왼쪽방향으로 돌리기
# 북쪽 방향일 때 왼쪽은 서쪽이 됨 (index 0 -> 3)
# 동쪽 방향일 때 왼쪽은 북쪽이 됨 (index 1 -> 0)
# 남쪽 방향일 때 왼쪽은 동쪽이 됨 (index 2 -> 1)
# 서쪽 방향일 때 왼쪽은 남쪽이 됨 (index 3 -> 2)
def turn_left():
global d
d -= 1
if d == -1:
d = 3
turn_time = 0 # 회전 횟수
while True:
turn_left() # 왼쪽 회전
nx = dx[d] + r
ny = dy[d] + c
if array[nx][ny] == 0 and not visited[nx][ny]:
visited[nx][ny] = True # 방문
r = nx
c = ny # 갱신
count += 1
turn_time = 0 # 다시 초기화
continue
else:
turn_time += 1
if turn_time == 4: # 후진하기
nx = r - dx[d]
ny = c - dy[d]
if array[nx][ny] == 1:
break
else:
r = nx
c = ny
turn_time = 0
print(count)
728x90
'Algorithm (PS)' 카테고리의 다른 글
[백준] 2615 오목 Python (0) | 2022.10.27 |
---|---|
[백준] 5972 택배배송 Python (0) | 2022.10.26 |
[백준] 19598 최소 회의실 개수 Python (0) | 2022.10.23 |
[백준] 21314번: 민겸수 Python (0) | 2022.10.21 |
[백준] 21318 피아노체조 Python (0) | 2022.10.21 |