3번을 진행2번을 반복queue<pair<int, int>> qu; // 탐색용 queue 생성
dist[0][0] = 1; // 방문 기록
qu.push({ 0, 0 }); // 해당 칸을 큐에 삽입
while (!qu.empty()) {
pair<int, int> cur = qu.front();
qu.pop(); // 큐에서 원소를 꺼냄
for (int dir = 0; dir < 4; dir++) {
int nx = cur.X + dx[dir]; // 인접 칸의 X 좌표 계산
int ny = cur.Y + dy[dir]; // 인접 칸의 Y 좌표 계산
if (nx < 0 || nx >= N || ny < 0 || ny >= M) { continue; } // 바운드 처리
if (dist[nx][ny] != 0 || board[nx][ny] == 0) { continue; } // 방문 여부, 방문 가능 여부 처리
dist[nx][ny] = dist[cur.X][cur.Y] + 1; // 방문 기록
qu.push({ nx, ny }); // 해당 칸을 큐에 삽입
}
}
2번을 반복BFS의 경우 MLE, DFS의 경우 TLE가 뜰 수 있다.
이럴 땐 메모이제이션(DP)를 사용해야 한다.
[2186] 문자판을 확인하라.