(**삼성 SW 기출문제)
조건들이 까다로워서 어려웠다... 내가 푼건 아니고 남이 푼거보면서 안보고 그대로 작성해봤다. 반시계방향으로 회전하면서 바라본다는 점을 생각해야하고 또 하나는 다 돌아본다음에 그 방향을 유지하고 후진해야한다는거.... 진짜 읽은 그대로 코딩해야된다. 너무어렵다.. 갈길이 멀구나 힘을내자.
#include<iostream>
using namespace std;
int n, m;
int map[51][51];
int dx[] = { -1, 0, 1, 0 };
int dy[] = { 0, 1, 0, -1 };
int ans;
void dfs(int cx, int cy, int cd) {
if (map[cx][cy] == 0) {
map[cx][cy] = 2;
ans++;
}
for (int i = 0; i < 4; i++) {
int nd = (cd + 3 - i) % 4;
int nx = cx + dx[nd];
int ny = cy + dy[nd];
if (nx < 0 || ny < 0 || nx >= n || ny >= m) {
continue;
}
if (map[nx][ny] == 0) {
dfs(nx, ny, nd);
}
}
int nd = (cd + 2) % 4;
int nx = cx + dx[nd];
int ny = cy + dy[nd];
if (map[nx][ny] == 1) {
cout << ans;
exit(0);
}
dfs(nx, ny, cd); //바라보는 방향을 유지한채.....
}
int main(void) {
cin >> n >> m;
int r, c, dir;
cin >> r >> c >> dir;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> map[i][j];
}
}
dfs(r, c, dir);
return 0;
}
'Programming > BOJ' 카테고리의 다른 글
[백준/C++] 6603번: 로또 (2) | 2020.08.14 |
---|---|
[백준/C++] 7562번: 나이트의 이동 (0) | 2020.08.12 |
[백준/C++] 백준 10026번: 적록색약 (0) | 2020.08.10 |
[백준/C++] 백준 2667번: 단지번호붙이기 (0) | 2020.08.06 |
[백준/C++] 2606번: 바이러스 (플로이드 와샬/DFS/BFS) (0) | 2020.08.05 |