백준 삼성 코딩 기출 문제 - 로봇청소기 python
출처 : BAEKJOON ONLINE JUDGE
로봇청소기 (https://www.acmicpc.net/problem/14503)
문제 설명
NxM의 크기의 맵에서 로봇 청소기가 청소를 진행합니다. 주어진 위치에서 청소를 진행하고, 현재 방향을 기준으로 왼쪽 방향으로 회전하면서 탐색을 진행합니다. 빈 칸(0)이면 전진하고 청소(2)합니다. 왼쪽 방향에 청소할 공간이 없으면 회전합니다. 네 방향 모두 청소(2)가 되었거나 벽(1)이라면, 방향을 유지한 채 한 칸 후진합니다. 만약 후진도 할 수 없는 경우라면 작동을 멈춥니다.
문제 풀이
[1] 입력을 받습니다.
n, m = map(int, input().split()) x, y, d = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(n)] |
[2] 회전에 따라 이동하는 (x,y)를 정의하고, 현재 위치에서 청소(2)를 합니다.
dx, dy = (-1, 0, 1, 0), (0, 1, 0, -1) # 북쪽(0), 동쪽(1), 남쪽(2), 서쪽(3) board[x][y] = 2 # 빈칸(0), 벽(1), 청소(2) |
[3] 4방향을 모두 탐색하고, 왼쪽 회전에 따른 방향을 정의합니다.
- 북(위)(0)->서(왼)(1)->남(아래)(2)->동(오른)(3)->북(위)(0)
- 동(3) -> 북(0) 이 되기 위해서는 (3+1)%4 = 0. 즉, (d+3)%4가 다음 방향이 됩니다.
[4] 이동을 하여 빈칸이라면, 청소를 하고, 청소 횟수를 증가합니다. x, y는 이동한 위치로 저장합니다.
[5] 4방향으로 이동이 불가능하고, 후진시 벽(1)이라면 작동 종료 합니다. 반대로 벽이 아니라면 후진합니다.
def solve(x, y, d, answer): while True: check = False for k in range(4): # 4방향을 탐색한다. nd = (d + 3) % 4 # 회전 next_x, next_y = x + dx[nd], y + dy[nd] d = nd if not board[next_x][next_y]: # 빈칸이라면 board[next_x][next_y] = 2 # 청소한다. answer += 1 # 청소 횟수 증가 x, y = next_x, next_y check = True break if not check: # 4방향으로 이동이 불가능하고, if board[x - dx[d]][y - dy[d]] == 1: # 후진시 벽이라면 return answer # 작동 종료 else: x, y = x - dx[d], y - dy[d] # 후진한다. |
[6] 최종적으로 출력합니다.
전체 코드
n, m = map(int, input().split()) x, y, d = map(int, input().split()) board = [list(map(int, input().split())) for _ in range(n)]
dx, dy = (-1, 0, 1, 0), (0, 1, 0, -1) # 북쪽(0), 동쪽(1), 남쪽(2), 서쪽(3) board[x][y] = 2 # 빈칸(0), 벽(1), 청소(2)
def solve(x, y, d, answer): while True: check = False for k in range(4): # 4방향을 탐색한다. nd = (d + 3) % 4 # 회전 next_x, next_y = x + dx[nd], y + dy[nd] d = nd if not board[next_x][next_y]: # 빈칸이라면 board[next_x][next_y] = 2 # 청소한다. answer += 1 # 청소 횟수 증가 x, y = next_x, next_y check = True break if not check: # 4방향으로 이동이 불가능하고, if board[x - dx[d]][y - dy[d]] == 1: # 후진시 벽이라면 return answer # 작동 종료 else: x, y = x - dx[d], y - dy[d] # 후진한다.
print(solve(x, y, d, 1)) |