inflearn logo
강의

Course

Instructor

Coding Test Practice Test (with C++): For Large Companies

4. Product movement code explanation (decision algorithm, BFS)

선생님 안녕하세요. 다른 풀이에 대한 질문이 있습니다.

223

yhm1620

2 asked

0

안녕하세요. 항상 좋은 강의 감사드립니다.
 
문제에서는 vector<pair<int, int>>를 쓰셨는데, 저는 2차원 배열을 이용해서 풀어보았습니다.
 
#include <bits/stdc++.h> using namespace std; int board[10001][10001]; int n, m, s, e; int can(int w) { queue<int> Q; int ch[10001]; for (int i = 0; i < 10; i++) cout << ch[i] << " "; cout << endl; ch[s] = 1; cout << "앞부분 ch[e] : " << ch[e] << endl; Q.push(s); while(!Q.empty()) { int v = Q.front(); Q.pop(); for(int i = 0; i < 10; i++) { if(board[v][i] >= w && ch[i] == 0) { cout << "여기 옴" << endl; cout << v << " " << i << endl; ch[i] = 1; Q.push(i); } } } cout << "ch[e] : " << ch[e] << endl; return ch[e]; } int main() { ios_base::sync_with_stdio(false); freopen("input.txt", "rt", stdin); int lt = 1, rt = 1000000000, mid, res; cin >> n >> m; for(int i = 1; i <= m; i++) { int a, b, c; cin >> a >> b >> c; board[a][b] = c; } cin >> s >> e; while(lt <= rt) { mid = (lt + rt) / 2; if(can(mid)) { cout << "mid : " << mid << endl; res = mid; lt = mid + 1; } else { cout << "else mid : " << mid << endl; rt = mid - 1; } } cout << res; return 0; }
 
실행해보시면 답이 6이 나오는데, ch 배열이 새로 선언되어도 그 전의 값을 그대로 가지고 있는 것 같네요.
 
이 현상의 원인에 대해 질문드리고 싶습니다!

 

실행

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

Answer 1

0

yhm1620

#include <bits/stdc++.h>

using namespace std;

 

int board[10001][10001];

int n, m, s, e;

 

int can(int w) 

{

  queue<int> Q;

  vector<int> ch(10001, 0);

 

  ch[s] = 1;

  Q.push(s);

while(!Q.empty())

{

int v = Q.front();

Q.pop();

for(int i = 1; i < 10001; i++)

{

if(board[v][i] >= w && ch[i] == 0)

{

//cout << v << " " << i << endl;

ch[i] = 1;

Q.push(i);

}

}

}

return ch[e];

}

 

int main()

{

ios_base::sync_with_stdio(false); 

freopen("input.txt", "rt", stdin);

int lt = 1, rt = 1000000000, mid, res;

cin >> n >> m;

for(int i = 1; i <= m; i++)

{

int a, b, c;

cin >> a >> b >> c;

board[a][b] = c;

board[b][a] = c;

}

cin >> s >> e;

while(lt <= rt)

{

mid = (lt + rt) / 2;

if(can(mid))

{

//cout << "mid : " << mid << endl;

res = mid;

lt = mid + 1;

}

else

{ //cout << "else mid : " << mid << endl;

rt = mid - 1; 

}

}

cout << res;

return 0;

}

 

조합을 구할때 algorithm 함수 next_permutation 사용 가능 여부

0

457

1

최악의 경우 연산 질문이 있습니다.

0

411

1

로컬 환경과 다르게 오답이라고 나와서 문의 드립니다.

0

302

1

6강 3번 정사각형 그리키 코드 질문 드립니다.

0

242

1

1-5 효율적인 공부 dy를 시간(N)으로 하는 풀이 질문

0

320

1

반복수와 시간초 계산을 어떻게 하나요??

0

333

1

왜 DP로 풀어야하는지 궁금합니다

0

242

1

문제 해결방법에 대한 질문이 있습니다.

0

245

0

바둑대회 코딩 질문

0

270

1

6분 11초에서 dis [0][][]3차원 격자판이있는데요. 격자판안에 숫자는 문제에 없던데 어떻게 구해지는건가요?

0

200

0

실전모의고사 5회 1번 패턴찾기 질문있습니다.

0

220

1

전역변수관련 질문입니다.

0

255

1

5-1 패턴찾기 문제 질문드립니다.

0

218

1

오렌지 나무 문제 질문드립니다

0

310

1

코드 한번 봐주시면 감사하겠습니다!

0

175

1

코드 한번 봐주시면 감사하겠습니다!

0

234

1

코드 한번 봐주시면 감사하겠습니다!

0

198

1

시작점의 ch

0

204

1

vector에서 질문이 있습니다~!

0

235

1

그대로 따라했는데 시간 초과가 나왔습니다

0

161

1

2회 모의고사 4번 숲속의 기사 코드 질문이 있습니다.

0

288

1

질문있습니다.

0

209

1

이렇게 풀면 반례가 어떻게되나요?

0

245

1

1회 1번 공통 문자열 문제 설명 보충하시면 더 좋을 것 같습니다!

0

221

1