• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

선생님, 강의에있는 토마토문제를 3차원으로 변형한것을 풀어보았는데요, 차원이 하나 늘어났을 뿐인데 어디서 잘못된것인지 잘 모르겠어서 질문드립니다.

21.06.03 15:39 작성 조회수 107

0

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


struct Loc {
	int z;
	int x;
	int y;

	Loc(int a, int b, int c) {
		z = a;
		x = b;
		y = c;
	}

};

int tom[103][103][103];
int dis[103][103][103];

int main() {

	queue<Loc> q;
	int m, n, h;
	cin >> m >> n >> h;
	int flag = 0;
	for (int i = 0;i < h;i++) {
		for (int j = 0;j < n;j++) {
			for (int k = 0;k < m;k++) {

				cin >> tom[i][j][k];
				if (tom[i][j][k] == 1)
					q.push(Loc(i, j, k));

			}
		}
	}


	int dx[6] = { 1,-1,0,0,0,0 };
	int dy[6] = { 0,0,1,-1,0,0 };
	int dz[6] = { 0,0,0,0,1,-1 };

	while (!q.empty()) {

		Loc tmp = q.front();
		q.pop();

		for (int i = 0;i < 6;i++) {
			int xx = tmp.x + dx[i];
			int yy = tmp.y + dy[i];
			int zz = tmp.z + dz[i];

			if (tom[zz][xx][yy] == 0 && xx >= 0 && xx < n && yy >= 0 && yy < m && zz >= 0 && zz < h) {
				tom[zz][xx][yy] = 1;
				dis[zz][xx][yy] = dis[tmp.z][tmp.x][tmp.y] + 1;
				q.push(Loc(zz, xx, yy));

			}
		}
	}

	int max = 0;
	for (int i = 0;i < h;i++) {
		for (int j = 0;j < n;j++) {
			for (int k = 0;k < m;k++) {
				if (tom[i][j][j] == 0) { cout << -1;return 0; }

			}
		}
	}

	for (int i = 0;i < h;i++) {
		for (int j = 0;j < n;j++) {
			for (int k = 0;k < m;k++) {
				if (dis[i][j][j] > max)max = dis[i][j][k];

			}
		}
	}

	cout << max;

	return 0;

}

먼저 좋은 강의를 제공해주셔서 정말 감사하다는 말씀 드리고 싶습니다. 너무너무 큰 도움을 받고 있습니다.
그리고 강의에 없는 문제를 질문드려서 정말 죄송합니다.ㅜㅜ

이 문제는 강의에 있는 토마토문제에서 한 차원 늘렸을 뿐이고, 그래서 구조체에 z변수를 추가해서 똑같이 풀어보았는데요. 아무리 봐도 맞는 코드인것같고, 백준에 있는 테스트케이스를 넣어봐도 잘 나오는데 틀렸다고만 나오니 답답하네요

2차원과 똑같이 코드를 구성하면 안되는이유가 있는것일까요..?

답변 1

답변을 작성해보세요.

0

안녕하세요^^

마지막 두개의 삼중for문 안에서 오타입니다.

tom[i][j][j]

조주아님의 프로필

조주아

질문자

2021.06.05

선생님..정말 부끄러워요 ㅜㅜ 답변 너무너무 감사드립니다.

 3차원으로 확장해서 풀어보는 것 자체만으로도 훌륭합니다. 꼭 원하는 기업에 취직하시길 응원합니다.^^