inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

13913_숨바꼭질4

257

RokiePlayer

작성한 질문수 10

0

제가 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);

 

}

bfs C++ 코테 준비 같이 해요!

답변 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