[백준/BOJ] 백준 14503번 : 로봇 청소기
2020. 9. 8. 02:50ㆍ알고리즘 문제풀이
int clean_dxdy[4][2]를 이용해 청소할 위치를 확인하였고, int dxdy[4][2]를 이용해 후진하는 위치를 나타낼 때 사용했다.
코드
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int n, m;
int r, c, d;
int board[50][50];
int clean[50][50];
int clean_dxdy[4][2] = { {0,-1},{-1,0},{0,1},{1,0} };
int dxdy[4][2] = { {-1,0},{0,1},{1,0},{0,-1} };
int cnt = 0;
void Solve(pair<pair<int, int>, int> start)
{
pair<pair<int, int>, int> here = start;
//here 칸을 청소한적이 없을때
if (clean[here.first.first][here.first.second] == 0)
{
clean[here.first.first][here.first.second] = 1;
cnt++;
}
pair<pair<int, int>, int> there;
for (int i = 0; i < 4; i++)
{
//청소를 확인할 위치
pair<int, int> clean_xy = make_pair(here.first.first + clean_dxdy[here.second][0], here.first.second + clean_dxdy[here.second][1]);
//확인하는 위치가 청소한적이 있거나, 벽일때
if (clean[clean_xy.first][clean_xy.second] == 1 || board[clean_xy.first][clean_xy.second] == 1)
{
//회전
here.second = here.second - 1;
if (here.second < 0)
here.second = 3;
//네 방향이 모두 청소가 되어 있거나 벽일때
if (i == 3)
{
//한칸 후진
there = make_pair(make_pair(here.first.first - dxdy[here.second][0], here.first.second - dxdy[here.second][1]), here.second);
//후진할 수 없을때
if (there.first.first < 0 || there.first.first >= n || there.first.second < 0 || there.first.second >= m || board[there.first.first][there.first.second] == 1)
return;
else
break;
}
}
//청소할 공간을 찾았을때
else
{
there.second = here.second - 1;
if (there.second < 0)
there.second = 3;
there.first.first = clean_xy.first;
there.first.second = clean_xy.second;
break;
}
}
//there위치로 이동
Solve(there);
}
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
memset(clean, 0, sizeof(clean));
cin >> n >> m;
cin >> r >> c >> d;
int input;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
cin >> input;
board[i][j] = input;
}
pair<pair<int, int>, int> start = make_pair(make_pair(r, c), d);
Solve(start);
cout << cnt;
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 14890번 : 경사로 (0) | 2020.09.08 |
---|---|
[백준/BOJ] 백준 14889번 : 스타트와 링크 (0) | 2020.09.08 |
[백준/BOJ] 백준 14499번 : 주사위 굴리기 (0) | 2020.09.08 |
[백준/BOJ] 백준 13458번 : 시험 감독 (0) | 2020.09.08 |
[백준/BOJ] 백준 3190번 : 뱀 (0) | 2020.09.08 |