-
[BOJ][C++] 13549 숨바꼭질 3카테고리 없음 2022. 7. 3. 22:44
https://www.acmicpc.net/problem/13549
13549번: 숨바꼭질 3
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
#include <iostream> #include <deque> #include <stdio.h> #include <cstring> // memset using namespace std; #define MAX_SIZE 100000+1 int N, K; int visited[MAX_SIZE]; int bfs() { deque<int> dq; dq.push_back(N); visited[N] = 1; while (!dq.empty()) { // 덱의 앞의 요소들부터 꺼내옴 int pos_x = dq.front(); dq.pop_front(); if(pos_x == K) return visited[K] - 1; // 순간이동은 덱의 앞쪽에 집어넣음. if (pos_x * 2 < MAX_SIZE && !visited[pos_x * 2]) { dq.push_front(pos_x * 2); visited[pos_x * 2] = visited[pos_x]; } // 걷는이동은 덱의 뒤쪽에 집어넣음. if (pos_x + 1 < MAX_SIZE && !visited[pos_x + 1]) { dq.push_back(pos_x + 1); visited[pos_x + 1] = visited[pos_x] + 1; } // 걷는이동은 덱의 뒤쪽에 집어넣음. if (pos_x - 1 >= 0 && !visited[pos_x - 1]) { dq.push_back(pos_x - 1); visited[pos_x - 1] = visited[pos_x] + 1; } } } int main() { scanf("%d %d", &N, &K); printf("%d\n", bfs()); return 0; }