🧩 Problem Solving
[BOJ] 백준 14503번: 로봇청소기
문제링크
문제 분석 및 설계
단순 2차원 배열 구현 문제, 로봇의 위치를 이동시키며 청소 가능 여부 묻고 청소 → 이동 가능 방향 탐색 후 이동을 반복하면 됨
로직
While(더이상 후진 불가능하여 청소를 끝내야 하는 경우까지)
- 청소
- 현재 위치가 청소되어 있지 않다면(0이라면)
- 청소(0→2)
- 칸 개수 count
- 탐색 및 이동
- 탐색: 4가지 방향(왼, 아래, 오른, 위)에 대하여 갈 수 있는 방향 찾기
- 이동
- 갈 수 있는 방향이 있다면
- 이동(그 방향으로 이동, 그 방향으로 회전)
- 갈 수 있는 방향이 없다면
- 후진 가능 여부 탐색
- 후진(반대 방향으로 이동, 회전은 X)
- 청소 종료
주요 식
- 현재 기준 왼쪽 방향 얻기 → 나머지 연산 활용
- UP(0) → LEFT(3) → DOWN(2) → RIGHT(1)
- -1 → +4 로 보정 → %4 연산
int checkDir = ((curDir-i)-1+4)%4; //현재 기준 왼쪽 방향
테스트 케이스 및 반례
5 5
1 2 3
1 1 1 1 1
1 0 0 0 1
1 0 1 0 1
1 0 0 0 1
1 1 1 1 1
8
5 5
2 1 0
1 1 1 1 1
1 0 1 0 1
1 0 1 0 1
1 0 0 0 1
1 1 1 1 1
6
7 7
2 2 2
1 1 1 1 1 1 1
1 0 0 0 0 0 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 0 1 0 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1
21
7 7
4 2 1
1 1 1 1 1 1 1
1 0 0 0 1 0 1
1 0 1 1 0 0 1
1 0 0 0 0 1 1
1 0 0 1 0 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1
11
9 7
7 3 0
1 1 1 1 1 1 1
1 0 1 0 1 0 1
1 0 1 0 1 0 1
1 0 0 0 0 0 1
1 0 0 1 0 0 1
1 0 0 1 1 0 1
1 0 0 1 0 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1
25
9 7
3 4 2
1 1 1 1 1 1 1
1 0 1 0 1 0 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 0 0 1 1 0 1
1 0 0 0 1 0 1
1 1 0 1 1 1 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1
17
9 7
6 2 1
1 1 1 1 1 1 1
1 0 1 0 1 0 1
1 0 1 0 0 0 1
1 0 1 0 1 0 1
1 0 1 1 1 1 1
1 0 0 0 0 0 1
1 0 0 1 1 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1
13