Notice
Recent Posts
Link
정화 코딩
[C++] 숨바꼭질 (백준 1697번) 본문
https://www.acmicpc.net/problem/1697
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, k;
cin >> n >> k;
int maxs = 100001;
vector<bool> vst = vector<bool>(maxs, false);
int cnt = 0;
bool fin = false;
queue<int> q;
q.push(n);
vst[n] = true;
while(!q.empty()) {
int tmp = q.size();
for (int i = 0; i < tmp; i++) {
int cur = q.front();
q.pop();
if (cur == k) {
fin = true;
}
if ((cur - 1) >= 0 && (cur - 1) < maxs) {
if (!vst[cur - 1]) {
q.push(cur - 1);
vst[cur - 1] = true;
}
}
if ((cur + 1) >= 0 && (cur + 1) < maxs) {
if (!vst[cur + 1]) {
q.push(cur + 1);
vst[cur + 1] = true;
}
}
if ((cur * 2) >= 0 && (cur * 2) < maxs) {
if (!vst[cur * 2]) {
q.push(cur * 2);
vst[cur * 2] = true;
}
}
}
if (fin) {
break;
}
cnt++;
}
cout << cnt << '\n';
}
처음에는 dp가 생각나서 dp로 풀다가 뭔가 어렵고 복잡하고 이상해서..?? 태그를 봐버렸다... 근데 태그에 너비 우선 탐색이 있길래 아 난 왜 이런 쉬운 방법을 두고... 하면서 멍청한 나를 탓했다.
암튼 그래서 bfs로 풀어서 제출했는데 메모리 초과가 났다. (오답) 왜인가 했더니 이미 방문한 칸도 전부 q에 넣어서 q가 터진 것 같았다. 그래서 visited 벡터를 만들어 확인해서 넣도록 했다.
그렇게 했는데도 메모리 초과... (오답) 메모리가 좀 빡빡한 문제인걸까 암튼 visited 배열의 크기를 2 * max(n, k)에서 100001로 바꿔주니까 해결되었다. (정답)
'PS' 카테고리의 다른 글
[C++] 브실이의 구슬 아이스크림 (백준 29714번) (0) | 2024.06.18 |
---|---|
[C++] 침략자 진아 (백준 15812번) (0) | 2024.06.17 |
[C++] 쉬운 최단거리 (백준 14940번) (0) | 2024.06.02 |
[C++] 반짝반짝 2 (백준 22984번) (0) | 2024.05.28 |
[C++] 호 안에 수류탄이야!! (백준 15889번) (0) | 2024.05.28 |
Comments