[BOJ/백준] 14503. 로봇청소기 (Python)

10686 단어 구현구현

https://www.acmicpc.net/problem/14503

Problem

로봇청소기가 청소하는 구역의 갯수를 카운팅하는 문제

Solution

로봇청소기를 좌회전 방향을 기준으로 4방향으로 돌려간다음 카운팅을 해주고, 4구역모두 청소될경우 후진, 단 후진을 못하는 경우 종료

코드설명

1)복동남서 방향을 설정
2)turnLeft할때 direction-=1이라는 뜻 자체가 좌회전, 그러나 directionp[0]의 경우 -1이므로 direction=3으로 설정
3)4 방향을 체크해야하므로 for문을 통해 4방향을 탐색하고 청소되어있지 않고, 방문안했으면 2로 체크(2가 청소,0은 빈칸 1은 벽)
4)각각을 돌때 flag처리하고 break
5)만약 4방향을 돌았음에도 flag==False라면, 즉 모두 청소되어있다면, 후진
6)단 후진도, 후진할 곳이 벽이라면 break
7)나머지인 경우 후진 경로로 변경

Python Code

import sys

#북동남서
dy=[-1,0,1,0]
dx=[0,1,0,-1]

r,c=map(int,sys.stdin.readline().split())
y,x,direction=map(int,sys.stdin.readline().split())

graph=[]
visited=[[False]*c for _ in range(r)]

count=1

for _ in range(r):
    tmp=list(map(int,sys.stdin.readline().split()))
    graph.append(tmp)

visited[y][x]=True
graph[y][x]=2
def turnLeft():
    global direction
    direction-=1

    if direction<0:
        direction=3

while True:
    chk=False
    for i in range(4):
        turnLeft()
        ny=y+dy[direction]
        nx=x+dx[direction]

        if ny<0 or nx<0 or ny>r-1 or nx>c-1:
            continue

        if not visited[ny][nx] and graph[ny][nx]==0:
            visited[ny][nx]=True
            graph[ny][nx]=2
            y=ny
            x=nx
            chk=True
            count+=1
            break


    if chk==False:
        ny=y-dy[direction]
        nx=x-dx[direction]
        if ny < 0 or nx < 0 or ny > r - 1 or nx > c - 1:
            continue

        if graph[ny][nx]==1:
            print(count)
            break
        else:
            y=ny
            x=nx

좋은 웹페이지 즐겨찾기