1639: 인공지능 청소기 (생기부작성)
문제 설명
인공지능 청소기와 방의 상태가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오.
인공지능 청소기가 있는 방은 N x M 크기를 입력 받으며 각각 1x1 크기의 정사각형으로 나누어져 있다.
각각의 칸은 장애물(벽) 또는 빈칸 이다.
청소기는 동서남북 중 하나를 바라보고 있다.
각 칸은 좌표 r,c로 나타낼 수 있다.
가장 북서쪽이 0,0 이다.
가장 남동쪽이 N-1, M-1 이다.
즉, r,c 좌표는 북쪽에서 r+1번째 줄 이며, 서쪽에서 c+1번째 줄이다.
인공지능 청소기의 작동방식은 다음과 같다.
1. 현재 칸이 아직 청소되지 않은 경우, 현재 칸을 청소한다.
2. 현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 없는 경우,
1) 바라보는 방향을 유지한 채로 한 칸 후진할 수 있다면 한칸 후진하고 1번으로 돌아간다.
2) 바라보는 방향의 뒤쪽 칸이 벽이라 후진할 수 없다면 작동을 멈춘다.
3. 현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 있는 경우,
1. 반시계 방향으로 90도 회전한다.
2. 바라보는 방향을 기준으로 앞쪽 칸이 청소되지 않은 빈 칸인 경우 한 칸 전진한다.
3. 1번으로 돌아간다.
입력 설명
첫째 줄 방의 크기 N과 M이 입력된다. (입력 값은 3이상 50이하이다.)
둘째 줄에 처음에 인공지능 청소기가 있는 칸의 좌표 r,c와 처음에 로봇 청소기가 바라보는 방향 d가 입력된다.
d가 0이면 북쪽
1이면 동쪽
2이면 남쪽
3이면 서쪽을 바라보고 있다.
셋째 줄 부터 N개의 줄에 각 장소의 상태를 나타내는 N X M 개의 값이 한 줄에 M개씩 입력된다.
값이 0인 경우는 청소되지 않은 칸이며 1인경우에는 벽이 있는 것이다.
방의 가장 동서남북 줄 중 하나 이상에 위치한 모든 칸에는 벽이 있다. (즉, 벽으로 둘러 쌓여있다.)
인공지능 로봇은 항상 벽이 없는 곳에서 시작한다.
출력 설명
입력 예시 Copy
11 10
7 4 0
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 1 1 1 1 0 1
1 0 0 1 1 0 0 0 0 1
1 0 1 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
출력 예시 Copy
57