그림까지 그려가며 했습니다. 문제조건을 정확하게 만족하는거같은데 왜 저는 21이 나오는지 모르겠습니다. 깊이 우선탐색을 했고 이동한 조건을 만족한경우 break를 했습니다. 그리고 조건을 만족하지 못하는것을 카운트해서 4번해서 도중에 나오게 했습니다. 하도 안돼서 그림까지 그려가며 했는데 뭔가 제가 생각한대로 잘짰는데 안되니가 이상합니다.
//삼성 sw기출 로봇청소기 #include <stdio.h> int dx[4]={-1, 0, 1, 0}, dy[4]={0, 1, 0, -1}; int m, n, a[51][51], ans=0; int dfs(int x, int y, int d){ if (a[x][y]==0) {a[x][y]=2; ans++;} int stuck=0; printf("%d %d\n", x, y); for(int i=d+3; i>d-1; i--){ int ch=0; int nx=x+dx[i%4], ny=y+dy[i%4]; if (nx >=0 && nx<m && ny>=0 && ny<n && a[nx][ny]==0) { dfs(nx, ny, i%4); break; } else stuck++; } if (stuck==4){ int nx=x-2*dx[d], ny=y-2*dy[d]; if (nx>=0 && nx<m && ny>=0 && ny<n && a[nx][ny]!=1) dfs(nx, ny, d); } }
int main(){ int sx, sy, d; scanf("%d %d", &m, &n); scanf("%d %d %d", &sx, &sy, &d);
for (int i=0; i<m; i++){ for (int j=0; j<n; j++){ scanf("%d", &a[i][j]); } } dfs(sx, sy, d); printf("%d\n", ans); }
gaelim 6년 전
그림까지 그려가며 했습니다. 문제조건을 정확하게 만족하는거같은데 왜 저는 21이 나오는지 모르겠습니다. 깊이 우선탐색을 했고 이동한 조건을 만족한경우 break를 했습니다. 그리고 조건을 만족하지 못하는것을 카운트해서 4번해서 도중에 나오게 했습니다. 하도 안돼서 그림까지 그려가며 했는데 뭔가 제가 생각한대로 잘짰는데 안되니가 이상합니다.
//삼성 sw기출 로봇청소기
#include <stdio.h>
int dx[4]={-1, 0, 1, 0}, dy[4]={0, 1, 0, -1};
int m, n, a[51][51], ans=0;
int dfs(int x, int y, int d){
if (a[x][y]==0) {a[x][y]=2; ans++;}
int stuck=0;
printf("%d %d\n", x, y);
for(int i=d+3; i>d-1; i--){
int ch=0;
int nx=x+dx[i%4], ny=y+dy[i%4];
if (nx >=0 && nx<m && ny>=0 && ny<n && a[nx][ny]==0)
{ dfs(nx, ny, i%4); break; }
else stuck++;
}
if (stuck==4){
int nx=x-2*dx[d], ny=y-2*dy[d];
if (nx>=0 && nx<m && ny>=0 && ny<n && a[nx][ny]!=1)
dfs(nx, ny, d);
}
}
int main(){
int sx, sy, d;
scanf("%d %d", &m, &n);
scanf("%d %d %d", &sx, &sy, &d);
for (int i=0; i<m; i++){
for (int j=0; j<n; j++){
scanf("%d", &a[i][j]);
}
}
dfs(sx, sy, d);
printf("%d\n", ans);
}