Algorithm/구현
[백준] 14503번 : 로봇 청소기 (C++) (삼성 SW역량 기출)
루시킴
2021. 8. 30. 15:06
https://www.acmicpc.net/problem/14503
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어
www.acmicpc.net
삼성 SW역량 기출문제로 오랜만에 다시 풀어보았다. 많이 나오는 구현 문제이다!
설명은 주석으로 대체 :)
#include <iostream>
using namespace std;
int N, M;
int R, C, D;
int map[50][50];
int dx[4] = { -1,0,1,0 }; //0:북, 1:동, 2:남 , 3:서
int dy[4] = { 0,1,0,-1 };
int cnt = 0; //청소 공간
int main() {
cin >> N >> M;
cin >> R >> C >> D;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> map[i][j];
}
}
bool exit = false; //청소 끝 여부
while (!exit) {
cnt++; //청소
map[R][C] = 2; //청소표시
int check = 0; //네 방향 탐색
while (check<4) {
check++;
D = (D == 0 ? 3 : D - 1); //왼쪽방향으로
int cx = R + dx[D];
int cy = C + dy[D];
if (cx >= 0 && cx < N && cy >= 0 && cy < M) {
if (map[cx][cy] == 0) {//청소하지 않은 공간이면
R = cx; C = cy;
break;
}
}
if (check == 4) { //네 방향 탐색 후
int cx = R - dx[D]; //후진
int cy = C - dy[D];
if (cx >= 0 && cx < N && cy >= 0 && cy < M && map[cx][cy] != 1) {//벽이 아니면
R = cx; C = cy;
check = 0; //후진 후 재탐색
}
else { //벽이면
exit = true; //종료
break;
}
}
}
}
cout << cnt << endl;
}