[BOJ/백준] 14503. 로봇청소기 (Python)
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
Author And Source
이 문제에 관하여([BOJ/백준] 14503. 로봇청소기 (Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@iwsl1234/BOJ백준-14503.-로봇청소기-Python
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
Author And Source
이 문제에 관하여([BOJ/백준] 14503. 로봇청소기 (Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@iwsl1234/BOJ백준-14503.-로봇청소기-Python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)