본문 바로가기

~2023

[Python] 백준 14503번 문제, 로봇 청소기

728x90
반응형

<문제 링크>

 

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

 

14503번: 로봇 청소기

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어

www.acmicpc.net

 


<풀이>

 

문제에서 제공하는 조건에 맞게 구현하면 되는 문제이다.

 

다만, 2번 조건에는 a, b, c, d가 있는데

 

a, b 조건이 우선으로 주어졌지만, c와 d를 먼저 체크한 다음에 a와 b로 넘어가는게 맞다고 생각해

코드를 구현할 때 2-c, 2-d를 먼저 수행했다.

 


<코드>

board[][]: 맵

count: 청소한 칸 수

r, c: 현재 좌표 (r, c)


import sys


if __name__ == "__main__":
    N, M = map(int, sys.stdin.readline().split())
    board = []
    count = 0 # 청소한 칸

    r, c, d = map(int, sys.stdin.readline().split()) # (r, c), d = [0: 북, 1: 동, 2: 남, 3: 서]
    for i in range(N):
        board.append(list(map(int, sys.stdin.readline().rstrip().split())))

    while True:
        # 1
        if board[r][c] == 0:
            board[r][c] = -1
            count += 1

        # 2-c, 2-d
        if board[r-1][c] != 0 and board[r+1][c] != 0 and board[r][c-1] != 0 and board[r][c+1] != 0:
            if d == 0:
                if board[r+1][c] == 1:
                    break
                else:
                    r += 1
            elif d == 1:
                if board[r][c-1] == 1:
                    break
                else:
                    c -= 1
            elif d == 2:
                if board[r-1][c] == 1:
                    break
                else:
                    r -= 1
            elif d == 3:
                if board[r][c+1] == 1:
                    break
                else:
                    c += 1

            continue

        # 2-a, 2-b
        if d == 0:
            if board[r][c-1] == 0:
                c -= 1
            d = 3
        elif d == 1:
            if board[r-1][c] == 0:
                r -= 1
            d = 0
        elif d == 2:
            if board[r][c+1] == 0:
                c += 1
            d = 1
        elif d == 3:
            if board[r+1][c] == 0:
                r += 1
            d = 2

    print(count)

 

 

 

 

 

 
728x90
반응형