728x90

삼성 SW 역량 테스트 기출 문제인 14503번 문제

 

14503번: 로봇 청소기

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음

www.acmicpc.net

문제를 그대로 코드로 구현하면 되는 직관적인 문제였다.

def clean(now_row, now_col, direction):
    if li[now_row][now_col] == 0:
        li[now_row][now_col] = 2 #2는 청소된 부분을 말한다
    if li[now_row][now_col - 1] != 0 and li[now_row - 1][now_col] != 0 and li[now_row][now_col + 1] != 0 and li[now_row + 1][now_col] != 0:
        if direction == 0 and li[now_row + 1][now_col] != 1:
            clean(now_row + 1, now_col, direction)
        elif direction == 1 and li[now_row][now_col - 1] != 1:
            clean(now_row, now_col - 1, direction)
        elif direction == 2 and li[now_row - 1][now_col] != 1:
            clean(now_row - 1, now_col, direction)
        elif direction == 3 and li[now_row][now_col + 1] != 1:
            clean(now_row, now_col + 1, direction)
        else:
            return
    elif direction == 0:
        if li[now_row][now_col - 1] == 0:
            clean(now_row, now_col - 1, 3)
        else:
            clean(now_row, now_col, 3)
    elif direction == 1:
        if li[now_row - 1][now_col] == 0:
            clean(now_row - 1, now_col, 0)
        else:
            clean(now_row, now_col, 0)
    elif direction == 2:
        if li[now_row][now_col + 1] == 0:
            clean(now_row, now_col + 1, 1)
        else:
            clean(now_row, now_col, 1)
    elif direction == 3:
        if li[now_row + 1][now_col] == 0:
            clean(now_row + 1, now_col, 2)
        else:
            clean(now_row, now_col, 2)
from sys import stdin
n, m = list(map(int, stdin.readline().split()))
r, c, d = list(map(int, stdin.readline().split()))
li = []
visited = [[False] * m for i in range(n)]
for i in range(n):
    li.append(list(map(int, stdin.readline().split())))
clean(r, c, d)
count = 0
for i in range(n):
    for j in range(m):
        if li[i][j] == 2:
            count += 1
print(count)
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1932번 정수 삼각형  (0) 2020.01.18
[백준] 14890번 경사로  (0) 2020.01.16
[백준] 1149번 RGB 거리  (0) 2020.01.12
[백준] 9461번 파도반수열  (0) 2020.01.12
[백준] 11729번 하노이 탑 이동 순서  (0) 2020.01.12

+ Recent posts