반응형


<코드>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
int N, K;
int visit[500001][2];
queue<pair<int, int>> q; // <위치, 시간>
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> K;
visit[N][0] = true;
q.push({ N,0 });
while (!q.empty())
{
int now = q.front().first;
int time = q.front().second;
int pos = K + time * (time + 1) / 2;
q.pop();
if (pos > 500000)
{
cout << -1 << '\n';
break;
}
if (now == pos || visit[pos][time%2])
{
cout << time << '\n';
break;
}
for (int next : {now - 1, now + 1, 2 * now})
{
if (next >= 0 && next <= 500000 && !visit[next][(time+1)%2])
{
q.push({ next,time + 1 });
visit[next][(time+1)%2] = true;
}
}
}
}

풀이 방법
visit배열을 2차원 배열로 설정한 이유는 홀수초에 방문했는지 짝수초에 방문했는지 check 하기 위한 배열로
visit[17][1]은 홀수초에 17을 방문했다는 의미이다.
예를 들어 만약 수빈이가 10초(짝수초)에 위치 X를 방문했다고 가정하고 16초에 동생이 위치 X에 방문한다고 하면 수빈이는 X에서 X-1 또는 X+1로 왔다 갔다 하면서 16초에 동생을 찾을 수 있게 된다.
17071번: 숨바꼭질 5
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 500,000)에 있고, 동생은 점 K(0 ≤ K ≤ 500,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때
www.acmicpc.net
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[C/C++] 백준 13913번 - 숨바꼭질 4 (BFS) (0) | 2021.03.10 |
---|---|
[C/C++] 백준 11779번 - 최소비용 구하기 2 (다익스트라) (0) | 2021.03.10 |
[C/C++] 백준 9019번 - DSLR (0) | 2021.03.09 |
[C/C++] 백준 13549번 - 숨바꼭질 3 (BFS) (0) | 2021.03.09 |
[C/C++] 백준 12851번 - 숨바꼭질 2 (BFS) (0) | 2021.03.08 |