inflearn logo
강의

Course

Instructor

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

4. Forest Knight Code Explanation (BFS)

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

161

ismy123

8 asked

0

 
그대로 따라서 했는데 4번 5번 테스트케이스에서 시간초과가 나왔습니다,,,
3번 확인해도 똑같이 따라 코딩했는데 왜 그런걸까요...?
 
#include <iostream>
#include <queue>
using namespace std;

int dx[4] = { -1,0,1,0 }, dy[4] = { 0,1,0,-1 };
int board[1001][1001], dis[2][1001][1001];
queue<pair<int, int>> Q;
int w, h;

void BFS(int idx) {//idx = 2부터 시작했니, 3부터 시작했니 판가름할 변수
	while (!Q.empty()) {
		int x = Q.front().first;
		int y = Q.front().second;
		Q.pop();
		for (int i = 0; i < 4; i++) {
			int nx = x + dx[i];
			int ny = y + dy[i];
			if (nx >= 0 && nx < h&&ny >= 0 && ny < w&&dis[idx][nx][ny]==0) {//경계선
				if (board[nx][ny] != 1) {
					dis[idx][nx][ny] = dis[idx][x][y] + 1;
					Q.push(make_pair(nx, ny));
				}
			}
		}
	}
}

int main() {
	cin.tie(NULL); // 입력빨리하기 위해
	cin >> w >> h;
	for (int i = 0; i < h; i++) {
		for (int j = 0; j < w; j++)
			cin >> board[i][j];
	}

	int j;
	for (int i = 0; i < h; i++) {
		for (j = 0; j < w; j++) {
			if (board[i][j] == 2) { //영희의 위치찾기
				dis[0][i][j] = 1;//영희로부터의 거리를 1부터 출발
				Q.push(make_pair(i, j));
				BFS(0);
				break;
			}
		}
		if (j < w)break;
	}

	for (int i = 0; i < h; i++) {
		for (j = 0; j < w; j++) {
			if (board[i][j] == 3) {
				dis[1][i][j] = 1;
				Q.push(make_pair(i, j));
				BFS(1);
				break;
			}
		}
		if (j < w)break;
	}

	int min = 2147000000;
	for (int i = 0; i < h; i++) {
		for (int j = 0; j < w; j++) {
			if (board[i][j] == 4 && dis[0][i][j] > 0 && dis[1][i][j] > 0) {
				int res = dis[0][i][j] + dis[1][i][j];
				if (res < min)min = res;
			}
		}
	}

	cout << min - 2;

	return 0;
}

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

Answer 1

0

codingcamp

안녕하세요^^

제가 방금 채점해보니 "정답입니다" 가 나옵니다.

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

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

0

288

1

질문있습니다.

0

209

1

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

0

245

1

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

0

221

1