13913_숨바꼭질4
257
작성한 질문수 10
제가 2일 동안 고민해봤고 선생님의 논리와 같은 거 같은데 왜 안 풀리는지 모르겠습니다.
숨바꼭질2에서는 답이 잘 나와서 확인 해봤는데
(방금 고민하면서 문제 풀어버렸습니다. 그렇지만 질문은 있습니다.)
//cout << s <<" "; 이거 있는 부분을 해제하고 실행하면 괴상한 수를 잔뜩 거쳐서 목적지로 가더라고요.
이거 제 머리속에 있는 bfs 논리로는 괴상한 수들을 거칠 이유가 없습니다.
또
우선 dfs를 이용해서 경로 추적할 수 있을 거 같은데 그 방향은 안 되는 건가요?
#include<bits/stdc++.h>
using namespace std;
#define INF 987654321
int n, k, ret = INF, cnt;
const int jump[] = {-1, 1, INF};
int visited[100004];
int parent[100004];
void printPath(int i){
if(parent[i] == -1){
return;
}
printPath(parent[i]);
cout << i << " ";
}
void bfs1D(int s){
visited[s] = 1;
queue<int> q;
q.push(s);
int ns =-1;
parent[s] = -1;
while(!q.empty()){
int here = q.front(); q.pop();
//cout << s << " ";
if(here==k){
cnt++;
ret = visited[here]-1;
break;
}
for(int i=0;i<3;i++){
if(i==2){
ns = 2*here;
}else{
ns = here + jump[i];
}
if(ns <0 || ns >100000) continue;
if(visited[ns]==0){
visited[ns] = visited[here]+1;
q.push(ns);
parent[ns] = here;
}
}
}
cout << ret << '\n';
cout << s << " ";
printPath(k);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >>k;
bfs1D(n);
}
답변 1
0
안녕하세요. RokiePlayer님 ㅎㅎ
1. //cout << s <<" "; 이거 있는 부분을 해제하고 실행하면 괴상한 수를 잔뜩 거쳐서 목적지로 가더라고요.
이거 제 머리속에 있는 bfs 논리로는 괴상한 수들을 거칠 이유가 없습니다.
>> 이거 디버깅이 잘못되었습니다. 아래 코드 처럼 디버깅하셔야 합니다.
while(!q.empty()){
int here = q.front(); q.pop();
cout << here << " ";
즉, s가 아니라 here을 중심으로 디버깅하셔야 합니다. :)
5 17
5 4 6 10 3 8 7 12 9 11 20 2 16 14 13 24 18 22 19 21 40 1 15 17 4
5 4 8 16 17
위 코드를 돌리면 이렇게 나오는데 이는 괴상한 수는 아니죠?
2. 우선 dfs를 이용해서 경로 추적할 수 있을 거 같은데 그 방향은 안 되는 건가요?
>> dfs도 가능합니다. 잘 짜셨어요. trace할 때는 항상 dfs로 하던가 아니면 for 루프 사용해서 하던가 해야 합니다. :)
또 질문사항있으시면 언제든 말씀 부탁드립니다.
감사합니다.
강사 큰돌 올림.
BFS 당근마켓 승원이 문제 질문이 있습니다!
0
276
1
1-E질문입니다!
0
515
2
3-L 틀린 부분 피드백 부탁드립니다.
0
816
2
1-A문제 순열재귀함수 질문입니다.
0
380
1
1-A 일곱난쟁이문제입니다
0
454
1
문제 풀 때 방향성에 대해
0
798
1
맥에서 vs code로 실행 관련 질문입니다
0
520
1
17071번 메모리 초과
0
385
1
1-C질문입니다!
0
417
2
2-B BFS 시간초과질문
0
629
2
1-O 13번 라인
0
439
1
6-J 놀이공원 문제 질문
0
380
1
구현관련 질문
0
482
1
강의 교안
0
317
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
545
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
535
1
1-K
0
472
2
3-G번 질문있습니다.
1
472
3
3-C 실행 시간 질문드립니다.
0
492
1
4-A 문제 풀이 질문있습니다.
0
590
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
433
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
333
1
3-O go 함수 질문 드립니다.
1
444
2
4-A 출력 질문
0
302
1





