Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- DP
- BOJ 5568
- 다익스트라
- BOJ 2167
- priority_queue
- spring security
- BOJ 1697
- 조합 알고리즘
- BOJ 11726
- BOJ 2012
- BOJ 2146
- MySQL
- BOJ 2234
- serverless
- javascript
- BOJ 6593
- BOJ 1912
- springboot
- BOJ 1926
- BOJ 2407
- BOJ 4485
- Lambda
- BOJ 5791
- 플로이드 와샬
- BOJ 4948
- Coercion
- 분할과 정복
- AWS
- BOJ 1074
- BOJ 2213
Archives
- Today
- Total
고인물을 지양하는 블로그
BOJ 1697 숨바꼭질 본문
코딩 15분, 디버깅 1시간
- STL은 잘못이 없다.
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 <iostream>
#include <queue>
#include <cstring>
using namespace std;
int N,K;
int d[] = {1,-1};
int main() {
int visited[100002];
memset(visited,0,sizeof(visited));
scanf("%d%d",&N,&K);
queue<int> Q;
Q.push(N);
while(!Q.empty()) {
int tmp=Q.front();
Q.pop();
if(tmp == K) {
cout << visited[tmp];
return 0;
}
for(int i=0;i<3;++i) {
int nP;
if(i==2) nP = 2*tmp; // 여기!
else nP = tmp+d[i];
if((nP>=0&&nP<=100000)&&(visited[nP]==0||visited[nP]>visited[tmp]+1)) {
Q.push(nP);
visited[nP] = visited[tmp]+1;
}
}
}
}
며칠째 보는 BFS문제이다. 반 기계적으로 BFS 탐색 코드가 나왔는데 어이없게도 런타임 에러가 발생했다;;
자주 그렇듯 메모리 접근 오류라 직감했고, 배열 범위 체크 이외에는 메모리 오류가 발생할 일이 없다고 생각해 Short Circuit 이 발생했나 살펴봤지만, 늘 유의하며 코드를 작성하기에 당연하게도 Short Circuit 문제는 아니었다.
사실문제는 다른데 있었다.
주석 달린 위치에서
int nP = tmp + d[i];
...
if(i==2) nP = 2 * tmp;
d[i]가 문제였다. 전혀 신경을 못쓰고 있었는데 전역 d[] 배열의 범위를 넘어버린 것이다. 이런 사소한 문제 때문에 1시간이나 소비했다니.. 사실 이전에도 여러 번 런타임 에러가 발생해 포기한 문제가 있었는데 아마 이번 경우와 마찬가지로 신경 쓰지 못한 곳에서 배열 범위 초과가 일어났던 것 같다.
'Algorithms > ACMICPC(백준)' 카테고리의 다른 글
BOJ 5791 거의 최단 경로 (0) | 2019.07.14 |
---|---|
BOJ 6593 상범빌딩 (0) | 2019.07.04 |
BOJ 2146 다리 만들기 (0) | 2019.07.03 |
BOJ 2583,10026,7562... BFS/DFS (0) | 2019.07.01 |
BOJ 2504 괄호의 값 (0) | 2019.06.28 |
Comments