14503번: 로봇 청소기
첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽
www.acmicpc.net
(python3)
문제 해석
구현은 단순한데, 문제 해석을 직관적으로 하면 안됩니다. 작동 방식을 잘 따라가야... 주변에 1칸이라도 청소할 수 있는 곳이 있으면 일단 반시계 방향으로 90도 회전해야합니다. 바로 앞이 청소 안한 영역이더라도 직진하면 안되고, 일단 회전해야합니다.
그리고 주어지는 방향 값은 0,1,2,3 이 시계방향이고, 회전 방향은 반시계방향이니 이점도 유의해서 코딩하도록 합시다
구현 내용은 주석으로 달아놨습니다.
코드
def solution(input) :
# 입력 받기
R,C = list(map(int,input().split()))
r,c,d = list(map(int,input().split()))
maps = []
for _ in range(R) :
maps.append(list(map(int,input().split())))
D = [(-1,0),(0,1),(1,0),(0,-1)]
# 로봇청소기 동작
cnt = 0
while True :
if maps[r][c] == 0 : # 청소 안된 칸은 청소하기
cnt += 1
maps[r][c] = 2
flag = 0
for i in range(4) : # 주변 4칸에 빈칸 있는지만 체크
nd = (d+i)%4
dr,dc = D[nd]
nr,nc = r+dr, c+dc
if maps[nr][nc] == 0 :
flag = 1
break
if flag : # 빈칸 있으면 90도 회전하고, 회전 후 앞칸이 청소 안한 칸이면 이동
d = (d+3)%4
dr,dc = D[d]
nr,nc = r+dr, c+dc
if maps[nr][nc] == 0 :
r,c = nr,nc
continue
else : # 빈칸 없으면 후진, 벽이면 작동 정지
dr,dc = D[d]
r -= dr
c -= dc
if maps[r][c] == 1 :
break
print(cnt)
solution(input)
my solved.ac :
solved.ac
알고리즘 문제해결 학습의 이정표 🚩 Baekjoon Online Judge 문제들의 난이도 및 티어 정보를 제공하는 사이트입니다.
solved.ac
'Algorithem > 백준 PS with code' 카테고리의 다른 글
백준 #2108 - [S3] 통계학 : 최빈값 (0) | 2023.05.28 |
---|---|
백준 #1806 - [G4] 부분합 : 두 포인터 (0) | 2023.05.27 |
백준 #15685 - [G4] 드래곤 커브 : 구현 (0) | 2023.05.24 |
백준 #14890 - [G3] 경사로 : 구현 (0) | 2023.05.23 |
백준 #15683 - [G4] 감시 : 시뮬레이션, back tracking (0) | 2023.05.23 |