본문 바로가기
Problem Solving/BOJ

[Python] 14503. 로봇 청소기

by 부르르 2021. 4. 14.

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

 

14503번: 로봇 청소기

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

www.acmicpc.net


문제 조건에 첫행,끝행,첫열,끝열은 모두 벽으로 막혀있다고 했으므로

next_r과 next_c가 이동할 수 있는지 확인할 필요 없다.

문제를 잘 읽어보면 알고리즘 구현의 힌트를 찾을 수 있다.

di = ((-1,0),(0,1),(1,0),(0,-1))

N, M = map(int, input().split())
r, c, d = map(int, input().split())
MAP = [list(map(int, input().split())) for _ in range(N)]
check = [[False]*M for _ in range(N)]
cnt = 0

while True:
    check[r][c] = True
    next_d = (d-1)%4
    next_r = r + di[next_d][0]
    next_c = c + di[next_d][1]

    if MAP[next_r][next_c] == 0 and not check[next_r][next_c]:
        d = next_d
        r = next_r
        c = next_c
        cnt = 0
    elif MAP[next_r][next_c] == 1 or check[next_r][next_c] and cnt != 4:
        d = next_d
        cnt += 1

    if cnt == 4:
        next_r = r - di[d][0]
        next_c = c - di[d][1]
        if MAP[next_r][next_c] == 0:
            r = next_r
            c = next_c
            cnt = 0
        else:
            break

answer = 0
for r in range(N):
    for c in range(M):
        if check[r][c]:
            answer += 1

print(answer)

 

문제를 푸는데 도움이 된 테스트 케이스

# Input
4 4
1 1 0
1 1 1 1
1 0 0 1
1 1 0 1
1 1 1 1

# Output
3

 

728x90
반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[Python] 17142. 연구소 3  (0) 2021.04.20
[Python] 16235. 나무 재테크  (0) 2021.04.15
[Python] 15686. 치킨 배달  (0) 2021.04.08
[Python] 14499. 주사위 굴리기  (0) 2021.04.07
[Python] 13458. 시험 감독  (0) 2021.04.04

댓글