Jae-Kyung Cho LLM Developers who was a Robotics engineer

Baekjoon-14503-로봇 청소기

import sys
sys.setrecursionlimit(1e4)

N,M = map(int, input().split())
r,c,d = map(int,input().split())

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

class Robot:
    def __init__(self,r,c,d, board):
        self.r = r
        self.c = c
        self.head = d
        self.directions = [[-1,0],[0,1],[1,0],[0,-1]]

        self.board = board
        self.cleaned = [[0]*len(board[0]) for _ in range(len(board))]

    def rot(self):
        self.head = (self.head + 1) % 4
    
    def iscollide(self,head):
        dr,dc = self.directions[head%4]
        nr, nc = self.r+dr, self.c+dc
        if 0<=nr<N and 0<=nc<M:
            if self.board[nr][nc]==0:
                return False
        return True
    
    def iscleaned(self,head):
        dr,dc = self.directions[head%4]
        nr, nc = self.r+dr, self.c+dc
        if 0<=nr<N and 0<=nc<M:
            if self.cleaned[nr][nc]==0:
                return False
        return True
    
    def count(self):
        result = 0
        for i in self.cleaned:
            result += sum(i)
        return result

    def move_once(self, head):
        dr, dc = self.directions[head]
        self.r, self.c = self.r + dr, self.c + dc

    def move1(self):
        self.cleaned[self.r][self.c] = 1
        self.move2()

    def move2(self):
        if not (self.iscollide(self.head-1) or self.iscleaned(self.head-1)):
            self.head = (self.head-1) % 4
            self.move_once(self.head)
            self.move1()
        else:
            for i in range(4):
                self.head = (self.head-1) % 4
                if not (self.iscollide(self.head-1) or self.iscleaned(self.head-1)):
                    break
            if i != 3:
                self.move2()
            else:
                if not self.iscollide(self.head-2):
                    self.move_once(self.head-2)
                    self.move2()
                else:
                    return 


robot = Robot(r,c,d,board)
robot.move1()
print(robot.count())
Comments