inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Nhập môn giải bài toán bằng thuật toán cho việc làm CNTT (với C/C++): Luyện thi viết mã

89. Cà chua (dùng BFS)

토마토 시간초과 질문입니다

412

pb

9 câu hỏi đã được viết

0

선생님 풀이 보기 전에 두가지 방법으로 풀었는데 두 방법모두 4, 5번 input에 대해 시간초과가 나옵니다 대량 3~4초씩 걸립니다 ㅠㅠ

두가지 방법 하나는 선생님 풀이와 사소한 부분을 제외하면 같은 방식이고, 다른 하나는 pair를 사용해서 level을 올리는 방식으로 했습니다. 두번째 방식 코드 올려봅니다.

왜 시간초과가 생기는 것일까요..?ㅠㅠ

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<queue>

struct Pos
{
	bool operator==(const Pos& other)
	{
		return y == other.y && x == other.x;
	}

	bool operator!=(const Pos& other)
	{
		return !(*this == other);
	}

	Pos operator+(const Pos& other)
	{
		Pos tmp = *this;
		tmp.y = tmp.y + other.y;
		tmp.x = tmp.x + other.x;
		return tmp;
	}

	int y;
	int x;
};

Pos front[4] = {
	{-1, 0},
	{0, 1},
	{1, 0},
	{0, -1},
};

int main(void)
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	freopen("in5.txt", "rt", stdin);  // 파일 입력받음

	int n, m;  // n은 상자 세로, m은 상자 가로
	cin >> m >> n;

	vector<vector<int>> box(n, vector<int>(m));
	queue<pair<Pos, int>> q;
	for (int y = 0; y < n; y++)
	{
		for (int x = 0; x < m; x++)
		{
			cin >> box[y][x];
			if (box[y][x] == 1)
			{
				q.push(make_pair(Pos{ y, x }, 0));
			}
		}
	}

	int now_lv;
	while (q.empty() == false)
	{
		pair<Pos, int> tmp = q.front();
		q.pop();

		Pos now = tmp.first;
		now_lv = tmp.second;

		for (int dir = 0; dir < 4; dir++)
		{
			Pos next = now + front[dir];

			if (next.y<0 || next.y>n - 1 || next.x<0 || next.x>m - 1)
				continue;

			if (box[next.y][next.x] == -1 || box[next.y][next.x] == 1)
				continue;

			box[next.y][next.x] = 1;
			q.push(make_pair(next, now_lv + 1));
		}
	}

	for (int y = 0; y < n; y++)
	{
		for (int x = 0; x < m; x++)
		{
			if (box[y][x] == 0)
			{
				cout << "-1";
				return 0;
			}
		}
	}

	cout << now_lv;
}

c++ 코딩-테스트

Câu trả lời 1

0

pb

그.. map 사용 강의 본 후에 디버그 모드에서 릴리스 모드로 바꿔서 실행해보니 굉장히 빠르게 잘 작동합니다..ㅎㅎ 머쓱하네요 좋은 강의 감사합니다!!!

87번 채점 프로그램에 오류가 있는 것 같습니다.

0

88

2

그리디 파트

0

115

2

안녕하세요. 선생님(54번 코드 관련 문의)

0

141

2

테스트 파일 exit_coe_1, time_limit_exceeded 질문

0

142

1

C언어로 코드를 짜면 채점 시에 한 문제 빼고 시간 초과가 발생하는데 해결하는 방법이 있을까요?

0

171

1

19번 질문있습니다

0

121

1

6번 관련 채점오류입니다

0

88

2

22번 문제는 C로 풀어주신 건가요 C++로 풀어주신 건가요?

0

166

2

dev C++ 콘솔창 바로 닫힘

0

245

1

최신화하기

0

171

1

채점이 안되요...

1

260

1

안녕하세요 강사님 정렬에 대해서 설명이 조금 더 듣고 싶습니다.

0

113

1

45번 공주구하기 문제를 list를 이용해서 이렇게 풀어도 될까요?

0

155

1

39번 두 배열 합치기 문제 채점 오류인가 코드 오류인가

0

155

0

채점기에서 틀렸다고 나오는데 이유를 모르겠습니다.

0

149

2

해당 강의에서 C언어로만 진행하는 강의 문의 건

0

144

2

87번 문제 섬나라 아일랜드 질문

0

128

1

16번 문제에서 직접 답을 대입하면 정답이 나오는데 채점에서 wrong answer가 나옵니다.

0

149

1

40번 교집합 문제

0

166

1

43번 뮤직비디오 문제 테스트케이스 4번을 만족 못합니다.

0

169

1

41. 연속된 자연수의 합 문제 질문있습니다.

0

165

1

질문있습니다.

0

191

2

시간초과가 나요

0

172

1

43번 문제 3 ~ 5번에 문제가 있는것 같습니다.

0

247

1