1. 풀이방법.
- 문제의 조건대로 차례로 구현을 해주면 되며,
- 문제에서 첫행,첫열,끝행,끝열은 모두 벽이다 라는 조건도 맞추어 주었으므로 경계의 범위도 신경쓰지 않아도 되서
- 매우 편한 문제였습니다.
- 저 같은 경우 3,4 번의 종료조건을 먼저 체크해주고 그것의 결과에따라 변동을 주는 쪽으로 코드를 짰습니다.
2. 주의사항
- 딱히 없습니다. (저는 청소할 구역은 0, 벽은 1, 청소한 구역은 2 로 설정하였습니다.)
3.나의코드
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int dx[4] = { -1,0,1,0 }; //북동남서
int dy[4] = { 0,1,0,-1 }; //0,1,2,3
int N, M;
int rx, ry, rd;
int robomap[51][51]; //빈칸은 0, 벽은 1
int cleancount;
void inputs() {
cin >> N >> M;
cin >> rx >> ry >> rd;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> robomap[i][j];
}
}
}
void cleanroom() {
while (1) {
if (robomap[rx][ry] == 0) {
robomap[rx][ry] = 2; //청소
cleancount++;
}
bool lastcheck = false;
for (int i = 0; i < 4; i++) {//종료조건 검사
if (robomap[rx + dx[i]][ry + dy[i]] == 0) { lastcheck = true; break; }
}
if (lastcheck == false) {
if (robomap[rx + dx[(rd + 2) % 4]][ry + dy[(rd + 2) % 4]] == 1) {
cout << cleancount << "\n"; break;
}
else {
rx += dx[(rd + 2) % 4]; ry += dy[(rd + 2) % 4];
}
}
else if (lastcheck == true) {
while (1) {
if (robomap[rx + dx[(rd + 3) % 4]][ry + dy[(rd + 3) % 4]] == 0) {
rd = (rd + 3) % 4;
rx += dx[rd]; ry += dy[rd];
break;
}
else {
rd = (rd + 3) % 4;
}
}
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
inputs();
cleanroom();
return 0;
}
'알고리즘 문제풀이 > 구현' 카테고리의 다른 글
백준 17144 [C++] (0) | 2020.12.08 |
---|---|
백준 14499 [C++] (0) | 2020.12.08 |
백준 14891 [C++] (0) | 2020.12.06 |
백준 2840 [C++] (0) | 2020.12.06 |
백준 2033 C++ (0) | 2020.11.25 |