https://www.acmicpc.net/problem/14503
삼성 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;
}
'Algorithm > 구현' 카테고리의 다른 글
[백준] 17837번 : 새로운 게임 2 (C++) (삼성 SW 역량테스트) (0) | 2021.09.19 |
---|---|
[프로그래머스] 괄호 변환 (C++) (2020 KAKAO BLIND RECRUITMENT) (0) | 2021.09.10 |
[백준] 10250번 : ACM 호텔 (0) | 2021.09.02 |
[백준] 15685번 : 드래곤 커브 (C++) (0) | 2021.08.29 |
[백준] 1793번:타일링 (C++) (0) | 2021.08.21 |
댓글