inflearn logo
강의

Course

Instructor

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

4. Forest Knight Code Explanation (BFS)

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

288

purple

6 asked

0

#include <bits/stdc++.h>
using namespace std;

struct Data {
int x, y, day;
Data(int a, int b, int c) {
x = a;
y = b;
day = c;
}
};
int w, h;
int my_map[1001][1001], ch[2][1001][1001], res_me[1001][1001], res_knight[1001][1001], res_min = INT_MAX;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
Data me(0, 0, 0), knight(0, 0, 0);
queue<Data> Q;
vector<Data> straw_pos;

void Find(string m_or_n) {
int ch_;
if (m_or_n == "m") {
ch_ = 0;
}
else {
ch_ = 1;
}
while(!Q.empty()) {
Data a = Q.front();
int x = a.x;
int y = a.y;
int day = a.day;
ch[ch_][x][y] = 1;
Q.pop();

if(my_map[x][y] == 4) {
if(m_or_n == "m") {
if(res_me[x][y] == 0) res_me[x][y] = day;
}
else if(m_or_n == "n") {
if(res_knight[x][y] == 0) res_knight[x][y] = day;
}
}
for(int i=0; i<=3; i++) {
int xx = x + dx[i];
int yy = y + dy[i];

if(xx >=1 && xx <= h && yy>=1 && yy <=w) {
if(my_map[xx][yy] != 1 && ch[ch_][xx][yy] != 1) {
Q.push(Data(xx, yy, day+1));
}
}
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
freopen("input.txt", "rt", stdin);
cin >> w >> h;
for(int i=1; i<=h; i++) {
for(int j=1; j<=w; j++) {
cin >> my_map[i][j];
if (my_map[i][j] == 2) me = Data(i, j, 0);
if (my_map[i][j] == 3) knight = Data(i, j, 0);
else if(my_map[i][j] == 4) straw_pos.push_back(Data(i, j, 0));
}
}

Q.push(me);
ch[0][me.x][me.y] = 1;
Find("m"); // me

Q.push(knight);
ch[1][knight.x][knight.y] = 1;
Find("n"); // knight

for(int i=0; i<straw_pos.size(); i++) {
int x = straw_pos[i].x;
int y = straw_pos[i].y;
int sum = res_me[x][y] + res_knight[x][y];
if(sum == 0) sum = INT_MAX;
res_min = min(sum, res_min);
}
cout << res_min;

return 0;
}

 

강의는 다들었습니다.

로직 자체는 같은 것 같습니다.

다만 저는 영히의 위치, 기사의 위치, 딸기의 위치를 배열에 저장하고 진행하였습니다.

 

4, 5번 테스트 케이스에서 타임리밋이 나오는데 이유를 잘 모르겠습니다..... 답변해주시면 감사하겠습니다.

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

Answer 1

0

codingcamp

안녕하세요^^

섹션0의 강의자료를 다운받으면 모든 문제의 채점폴더가 있고, 그 폴더에 4번, 5번 테스트데이타도 있으니 스스로 확인해 보시기 바랍니다.

조합을 구할때 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

223

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

질문있습니다.

0

209

1

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

0

245

1

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

0

221

1