# MoveCrashingWall - map\[nx]\[ny]값 기준 vs 벽부순횟수(0or1)기준

Solution1 : map\[nx]\[ny]에 따라 bfs 진행 (가장 직관적)\
큐에 다음 좌표 생성해서 넣을 때 현재까지 벽 부순횟수(cur.dCnt) 계속 넘겨주거나, 다음좌표가 1인경우에는 벽 부순횟수로 1을 넘겨주며 다음좌표를 생성한다.

1. map\[nx]\[ny] == '1'//벽인 경우. 벽을 뚫어야함.\
   cur.dCnt == 0 && !visited\[nx]\[ny]\[1] 일 때만 탐색한다!\
   q.add(new Point(nx,ny,1,cur.dist+1);\
   visited\[nx]\[ny]\[1] = true;
2. map\[nx]\[ny] == '0'//0인 경우. 현재까지 벽 부순횟수는 0일수도, 1일수도 있다.\
   !visited\[nx]\[ny]\[cur.dCnt] 일 때만 탐색한다!\
   q.add(new Point(nx,ny,cur.dCnt,cur.dist+1));//현재의 벽부순횟수 다음좌표로 넘겨준다!\
   visited\[nx]\[ny]\[cur.dCnt] = true;

⭐️⭐️⭐️⭐️⭐️Solution2 : 현재 좌표의 **벽 부순 횟수에 따라 bfs 진행**

1. cur.drill\_Cnt == 1//현재까지 벽을 이미 한번 부순 경우\
   if(map\[nx]\[ny] == '1' || visited\[1]\[nx]\[ny]) continue;\
   q.add(new Point(nx,ny,1,cur.dist+1);//map\[nx]\[ny]==0인 경우에만 탐색!\
   visited\[nx]\[ny]\[1] = true;\
   \
   (map\[nx]\[ny] == '1' : 가지 못한다. continue\
   visited\[1]\[nx]\[ny] : 방문체크! 벽을 한번 부쉈기 때문에 visited\[1]\[nx]\[ny] 방문체크해준다.)
2. else(cur.drillCnt == 0)//아직 벽을 부수지 않은 경우 .\
   if(visited\[nx]\[ny]\[0]) continue;\
   q.add(new mcw(nx,ny,map\[nx]\[ny]-'0',cur.dist+1);\
   visited\[nx]\[ny]\[map\[nx]\[ny]-'0'] = true;<br>

   **다음좌표**로 생성하는 mcw의 **drillCnt**는 **다음 좌표(nx,ny) 값에 따라 벽을 부수는 횟수가 달라진다.**\
   map\[nx]\[ny] == '1' : (nx,ny)에 대해 벽 부수는 횟수 drillCnt도 1이 되고\
   map\[nx]\[ny] == '0' : (nx,ny)에 대해 벽 부수는 횟수 drillCnt도 0이 된다.\
   \
   벽 부수는 횟수를 기준으로 bfs를 진행하기 때문에 다음 좌표를 생성할 때에도 벽 부수는 횟수를 업데이트해서 객체를 생성하고, 큐에 넣어줘야한다!
