개발조아

[BOJ/백준] 14503 로봇 청소기 파이썬 본문

알고리즘/백준

[BOJ/백준] 14503 로봇 청소기 파이썬

개발조아 2021. 9. 9. 13:44
728x90

문제 링크 : https://www.acmicpc.net/problem/14503

 

14503번: 로봇 청소기

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어

www.acmicpc.net

시뮬레이션 문제이다.

 

나는 큐를 이용하여 풀었다.

 

4방향 확인 중 이동할 곳이 있다면 현재 좌표를 수정한다.

만약 4방향 중 이동할 곳이 없다면 뒤로 이동하는데 벽이라면 답을 출력하고 끝내면 된다.

 

from sys import stdin

input = stdin.readline
dx = [-1,0,1,0]
dy = [0,1,0,-1]

n,m = map(int, input().split())

x,y,d = map(int, input().split())

board = [list(map(int, input().split())) for _ in range(n)]

def solv():
    global x,y,d
    answer = 1
    visited = [[False]*m for _ in range(n)]
    visited[x][y] = True
    while True:
        flag = False
        for _ in range(4):
            d = (d-1)%4
            nx = x + dx[d]
            ny = y + dy[d]
            if point_validator(nx,ny,visited):
                visited[nx][ny] = True
                answer += 1
                x,y = nx,ny
                flag = True
                break
        if not flag:
            nx = x - dx[d]
            ny = y - dy[d]
            if board[nx][ny] == 0:
                x,y=nx,ny
            else:
                print(answer)
                return
def point_validator(x,y,visited):
    if board[x][y] == 1:
        return False
    elif visited[x][y]:
        return False
    return True
solv()

 

Comments