1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
- BFS를 이용하는 간단한 문제
- if() 조건문 안의 메모리 초과 오류를 처음에 생각하지 않고 구현하였다가 디버깅 돌리면서 다시 깨닫게되었음
더보기
#include <iostream>
#include <queue>
// def
#define MAX_SIZE 100000
#define PAIR std::pair<int, int>
#define DEBUG_MODE 0
// global
bool visisted[MAX_SIZE + 1];
// method
int BFS(int N, int K);
int main()
{
// 1697 - 숨바꼭질
std::ios::sync_with_stdio(false);
std::setbuf(stdout, NULL);
int N = 0; // 수빈이 위치
int K = 0; // 동생 위치
(void)scanf("%d %d", &N, &K);
const int answer = BFS(N, K);
printf("%d", answer);
return 0;
}
int BFS(int N, int K)
{
int answer = 0;
std::queue<PAIR> que;
que.push(PAIR(N, 0));
visisted[N] = true;
while (!que.empty())
{
PAIR pair = que.front();
que.pop();
int value = pair.first;
int score = pair.second;
#if DEBUG_MODE
printf("[%s] { value : %d, score : %d }\n", __FUNCTION__, value, score);
#endif
if (value == K)
{
answer = score;
break;
}
if ((MAX_SIZE >= value-1 && 0 <= value-1) && false == visisted[value - 1])
{
que.push(PAIR(value - 1, score + 1));
visisted[value - 1] = true;
}
if ((MAX_SIZE >= value+1 && 0 <= value+1) && false == visisted[value + 1])
{
que.push(PAIR(value + 1, score + 1));
visisted[value + 1] = true;
}
if ((MAX_SIZE >= value*2 && 0 <= value*2) && false == visisted[value * 2])
{
que.push(PAIR(value * 2, score + 1));
visisted[value * 2] = true;
}
}
return answer;
}
'Coding Problem > 백준' 카테고리의 다른 글
[백준] 1753 - 최단 경로 (0) | 2021.01.03 |
---|---|
[백준] 2206 - 벽 부수고 이동하기 (0) | 2020.12.08 |
[백준] 7569 - 토마토 (0) | 2020.12.04 |
[백준] 7576 - 토마토 (0) | 2020.12.04 |
[백준] 2178 - 미로 탐색 (0) | 2020.12.01 |