Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

hwooo

BOJ (C/C++) 1697번: 숨바꼭질 본문

Study/Algorithm

BOJ (C/C++) 1697번: 숨바꼭질

hwooo 2022. 12. 4. 01:03

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;
}