hwooo
BOJ (C/C++) 1697번: 숨바꼭질 본문
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net


풀이
BFS로 최단 시간을 찾았다.코드
#include <stdio.h>
#include <queue>
using namespace std;
int Find(int start, int end) {
if (start == end) return 0;
int now, next, move[3] = { 1,-1 };
int visited[100001] = { 0, };
queue <int> Q;
Q.push(start); visited[start] = true;
while (!Q.empty()) {
now = Q.front(); Q.pop();
// 다음 지점은 +1, -1, *2의 방향으로 움직여야 되므로
move[2] = now;
for (int i = 0; i < 3; i++) {
next = now + move[i];
// 범위 내에 들어오지 않는다면 계산 x
if (next < 0 || 100000 < next) continue;
if (!visited[next]) {
// 다음 지점에 동생이 있다면 함수 종료 (초기값을 1로 잡아서 return 시에 +1 생략)
if (next == end) return visited[now];
Q.push(next);
visited[next] = visited[now] + 1;
}
}
}
}
int main() {
int N, K;
scanf("%d %d", &N, &K);
printf("%d", Find(N, K));
return 0;
}
'Study > Algorithm' 카테고리의 다른 글
| BOJ (C/C++) 12851번: 숨바꼭질 2 (0) | 2022.12.04 |
|---|---|
| BOJ (C/C++) 7562번: 나이트의 이동 (0) | 2022.12.04 |
| BOJ (C/C++) 6593번: 상범 빌딩 (0) | 2022.12.04 |
| BOJ (C/C++) 5567번: 결혼식 (0) | 2022.12.03 |
| BOJ (C/C++) 18352번: 특정 거리의 도시 찾기 (0) | 2022.12.03 |