```cpp
#include
#include
#include
#include
#include
using namespace std;
vector> board;
vector card;
int dx[] = {1,-1,0,0};
int dy[] = {0,0,1,-1};
int answer = 0x3f3f3f3f;
int r,c;
int bfs(int dest){
bool check[4][4] = {0, };
queue,int>> q;
q.push({{r,c},0});
check[r][c] = true;
while(!q.empty()){
int x = q.front().first.first;
int y = q.front().first.second;
int cnt = q.front().second;
q.pop();
if(board[x][y] == dest){
board[x][y] = 0;
r = x, c = y;
return cnt+1;
}
for(int i=0;i<4;i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx < 0 || ny < 0 || nx >= 4 || ny >= 4)
continue;
if(!check[nx][ny]){
check[nx][ny] = true;
q.push({{nx,ny},cnt+1});
}
}
for(int i=0;i<4;i++){
int nx = x;
int ny = y;
while(nx+dx[i]>=0&&ny+dy[i]>=0&&nx+dx[i]<4&&ny+dy[i]<4){
nx += dx[i];
ny += dy[i];
if(board[nx][ny])
break;
}
if(!check[nx][ny]){
check[nx][ny] = true;
q.push({{nx,ny},cnt+1});
}
}
}
}
int solution(vector> b, int rr, int cc) {
bool card_check[7] = {0,};
int depth =0;
for(int i=0;i
코멘트
- 순열 + bfs까지는 접근했는데 문제를 이해를 못해서 답을 봤습니다. 1칸식 이동 or 숫자가 있는 칸까지 한 번에 이동이 아니라
무조건 후자인줄 알고 bfs구현을 못하겠다라고요.
- 그리고 여러가지 풀이를 봤는데 제가 참고한 풀이 같은 n을 방문할 차례일때 무조건 가까운 n을 먼저 방문하더라고요. 증명을 해보거나 찾아보려고 했는데 못찾았습니다. 카카오 풀이에서도
![image](https://github.com/user-attachments/assets/d5421ffc-2622-49ad-b2c9-74b1c61d3fa2)
이렇게 말했는데 해당풀이는 무조건 가까운 다음 숫자를 먼저 방문하고 페어를 지워줍니다... 어떻게 가능한 걸까요...?
🔗 카드 짝 맞추기