문제 설명
https://www.acmicpc.net/problem/14503
문제 풀이
사실 문제에서 나온 대로 구현만 하면 되는데 좌표가 자꾸 헷갈려서 오래 걸렸던 문제..
그래도 이 문제를 풀고 나니 좌표에 대한 감이 어느정도 잡혔다
n, m = list(map(int, input().split()))
r, c, d = list(map(int, input().split()))
board = [list(map(int, input().split())) for _ in range(n)]
dx = [-1, 0, 1, 0] # 북, 동, 남, 서
dy = [0, 1, 0, -1]
result = 0
while True:
# 청소가 안 되어 있는 공간일 경우 청소
if board[r][c] == 0:
board[r][c] = 2
result += 1
# 주변 4칸이 청소되어 있거나 벽일 경우
if board[r+1][c] > 0 and board[r-1][c] > 0 and board[r][c+1] > 0 and board[r][c-1] > 0:
# 한 칸 후진
r = r + dx[(d + 2) % 4]
c = c + dy[(d + 2) % 4]
if board[r][c] == 1: # 후진한 칸이 벽일 경우
break
# 주변 4칸에 청소되지 않은 빈 칸이 있는 경우
elif board[r+1][c] == 0 or board[r-1][c] == 0 or board[r][c+1] == 0 or board[r][c-1] == 0:
d = d - 1 if d > 0 else 3 # 회전
# 앞쪽 칸 계산
nx = r + dx[d]
ny = c + dy[d]
if board[nx][ny] == 0: # 앞쪽 칸이 빈 칸인 경우 전진
r = nx
c = ny
print(result)
'알고리즘 > 백준' 카테고리의 다른 글
[백준`G5] 13023 - ABCDE (Python) (1) | 2024.03.08 |
---|---|
[백준`S1] 1932 - 정수 삼각형 (Python) (0) | 2024.03.06 |
[백준`S1] 2564 - 경비원 (Python) (1) | 2024.03.05 |
[백준`S2] 10971 - 외판원 순회 2 (Python) (0) | 2024.02.29 |
[백준`G5] 14891 - 톱니바퀴 (Python) (1) | 2024.02.28 |