문제
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지
www.acmicpc.net
소스코드
#include <queue>
#include <iostream>
using namespace std;
int x, y; //x는 수빈, y는 동생 좌표
int trace[100001];
queue<int> q;
int bfs() {
	q.push(x);
	trace[x] = 1;
	while (!q.empty()) {
		int p = q.front();
		q.pop();
		if (p == y) return trace[p] -1 ;
		if (p - 1 >= 0 && trace[p - 1] == 0) {
			q.push(p - 1);
			trace[p - 1] = trace[p] + 1;
		}
		if (p + 1 <= 100000 && trace[p + 1] == 0) {
			q.push(p + 1);
			trace[p + 1] = trace[p] + 1;
		}
		if (p * 2 <= 100000 && trace[2*p] == 0) {
			q.push(p * 2);
			trace[p * 2] = trace[p] + 1;
		}
	}
}
int main(void) {
	cin >> x >> y;
	
	cout << bfs();
	return 0;
}숨바꼭질도 토마토 문제와 마찬가지고 이전 값을 이용하는 문제다!
'개인 공부 > 코딩테스트' 카테고리의 다른 글
| [C++][프로그래머스][Dynamic Progamming] 타일 장식물 :: seoftware (0) | 2020.02.29 | 
|---|---|
| [C++][백준 1012][BFS DFS] 유기농 배추 :: seoftware (0) | 2020.02.29 | 
| [C++][백준 7576][BFS / DFS] 토마토 :: seoftware (0) | 2020.02.29 | 
| [C++][백준 1026 ][정렬] 보물 :: seoftware (0) | 2020.02.29 | 
| [C++][백준 1427][정렬] 소트인사이드 :: seoftware (0) | 2020.02.29 | 
 
										
									
댓글