728x90
문제 설명
https://www.acmicpc.net/problem/14503
14503번: 로봇 청소기
첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽
www.acmicpc.net
문제 풀이
사실 문제에서 나온 대로 구현만 하면 되는데 좌표가 자꾸 헷갈려서 오래 걸렸던 문제..
그래도 이 문제를 풀고 나니 좌표에 대한 감이 어느정도 잡혔다
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)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준`G5] 13023 - ABCDE (Python) (3) | 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) (2) | 2024.02.28 |