[백준][python]14503 로봇청소기

yylog·2022년 10월 7일
0
post-custom-banner

문제

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

소스코드

import sys
input = sys.stdin.readline


if __name__ == "__main__":
    n,m = map(int,input().split())
    r,c,d = map(int,input().split())

    #탐색 방향 0 3 2 1
    dx = [-1,0,1,0]
    dy = [0,1,0,-1]

    area = [list(map(int,input().split())) for _ in range(n)]
    visited = [ [0]*m for _ in range(n)]

    #현재 위치 청소
    visited[r][c] = 1
    res = 1

    while 1:
        flag = True
        #현재 위치에서 현재 방향을 기준으로 왼쪽부터 차례대로 탐색
        for i in range(4):
            nr = r + dx[(d+3)%4]
            nc = c + dy[(d+3)%4]
            d = (d+3)%4
            #청소 안했으면
            if 0<=nr<n and 0<=nc<m and area[nr][nc]==0 and visited[nr][nc]==0:
                #청소하고 전진하고 방향 바꾸고
                visited[nr][nc]=1
                res+=1
                r = nr
                c = nc
                #하나라도 청소했으면 후진 체크 안해도됨
                flag = False
                #청소하면 탐색 종료
                break
        #네 방향이 모두 청소가 되있는 경우엔        
        if flag:
            #후진했는데 벽이면?
            if area[r-dx[d]][c-dy[d]] == 1: #후진 현재 방향에서 - 해주면 후진
                print(res) #종료
                break
            else: #아니면 후진
                r = r-dx[d]
                c = c-dy[d]          

후기

구현문제는 문제에서 하라고 하면 된다.
로직 짤 때 심지어 2. 하고 하위에 1. 2. 3 이런식으로 설명이 되어 있는데 그러면 로직도 이렇게 짜면 된다 ㅠㅠ 괜히 다르게 해서 헷갈렸다;;;

  • 헷갈렸던 점

방향 함수를 북0서3남2동1 이렇게 숫자를 인덱스에 맞춰서 설정한다.

왼쪽부터 탐색하라고 했으니까 3>2>1>0 순으로 탐색하면 되고 (d+3)%4 로 계산해주면 현재 방향에서 왼쪽 칸을 탐색할 수 있다.

profile
경험하고 공부한 모든 것을 기록하는 공간
post-custom-banner

0개의 댓글