본문 바로가기
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

댓글