Python/구현 BOJ-14503 로봇청소기

[Python/구현] BOJ-14503 로봇청소기

📌문제링크 풀이참고

나는 처음 보자마자 dfs를 쓰면 될거라고 생각했다.

벽으로 둘러쌓은 공간을 제외하고 청소가 가능할거라 생각했는데, 그것이 아니였음…^_^

요구 사항에 맞게 구현하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
N,M = map(int, input().split()) # N 행/ M 열
now_x, now_y, di = map(int, input().split())
board= [list(map(int, input().split())) for _ in range(N)]

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

def start(now_x, now_y, di):
    x,y = now_x, now_y
    board[x][y] = 2
    cnt = 1
    while True :
        check = False
        for i in range(4):
            di = (di-1)%4 #북 서 남 동
            nx, ny = x+dx[di], y+dy[di]
            if 0<= nx < N and  0<= ny < M:
                if board[nx][ny]==0 : # 청소할 공간인 경우
                    cnt+=1
                    x,y=nx,ny
                    board[x][y] = 2
                    check = True
                    break
        if check==False :
            nx,ny = x-dx[di],y-dy[di]
            if 0 <= nx <N and 0 <= ny <M:
                if board[nx][ny] == 2 :
                    x,y=nx,ny
                elif board[nx][ny] == 1 :
                    print(cnt)
                    break
            else:
                print(cnt)
                break

start(now_x,now_y,di)