mo1lusca의 블로그
[백준] 1697 숨바꼭질 - C 본문
https://www.acmicpc.net/problem/1697
BFS를 사용해 풀면 된다.
BFS에 대해서는 이전 글을 참고하도록 하자.
2025.05.18 - [백준] - [백준] 2178 미로 탐색 - C
[백준] 2178 미로 탐색 - C
https://www.acmicpc.net/problem/2178 본격적으로 BFS에 대해 공부하기 위해 대표적인 BFS문제를 찾아 풀어보려 한다.. BFS는 너비우선탐색으로, 인접한 노드들을 차례대로 모두 탐색한다.또한 시작 노드부
mollusca0907.tistory.com
#include <stdio.h>
#include <stdlib.h>
#define MAX 200001
int visited[MAX];
int dist[MAX];
int queue[MAX];
int front = 0;
int rear = 0;
void enqueue(int x);
int dequeue();
int is_empty();
void bfs(int n, int k);
int main() {
int n, k;
scanf("%d %d", &n, &k);
bfs(n, k);
return 0;
}
void bfs(int start, int target) {
enqueue(start);
visited[start] = 1;
dist[start] = 0;
while (!is_empty()) {
int cur = dequeue();
if (cur == target) {
printf("%d", dist[cur]);
return;
}
int next[] = { cur + 1, cur - 1, cur * 2 };
for (int i = 0; i < 3; i++) {
if (next[i] >= 0 && next[i] < MAX) {
if (!visited[next[i]]) {
enqueue(next[i]);
visited[next[i]] = 1;
dist[next[i]] = dist[cur] + 1;
}
}
}
}
}
void enqueue(int x) {
queue[rear++] = x;
}
int dequeue() {
return queue[front++];
}
int is_empty() {
return front == rear;
}
이동할 수 있는 방향이 X-1, X+1, X*2니 이에 맞게 코드를 잘 짜주면 된다.
'PS' 카테고리의 다른 글
| [백준] 9012 괄호 - C++ (1) | 2025.06.01 |
|---|---|
| [백준] 1181 단어 정렬 - Rust (0) | 2025.05.27 |
| [백준] 2178 미로 탐색 - C (0) | 2025.05.18 |
| [백준] 24051, 24052 알고리즘 수업 - 삽입 정렬 - C (0) | 2025.05.15 |
| [백준] 23881, 23882 알고리즘 수업 - 선택 정렬 - C (0) | 2025.05.15 |