gaelim   6년 전

캡처.JPG
캡처2.JPG

그림까지 그려가며 했습니다. 문제조건을 정확하게 만족하는거같은데 왜 저는 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년 전

아 죄송합니다 질문글을 작성하면서 알았는데 제가 문제의 조건을 잘 못 이해했습니다. ㅠ.ㅠ 막혔을경우 2칸을 후진하고있었네요

댓글을 작성하려면 로그인해야 합니다.