안녕하세요.

여행벌입니다.

오늘은 BOJ 7569번 토마토 문제를 풀어보겠습니다.

전형적인 BFS를 이용한 문제인데요! 다만 3차원이라 방향을 다룰게 많다는 점이 특이한 것 같습니다.


https://www.acmicpc.net/problem/7569

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, 1 ≤ H ≤ 100 이다. 둘째 줄부터는 가장 밑의 상자부터 가장 위의 상자까지에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 하나의 상자에 담긴 토마토의 정보가 주어진다. 각 줄에는 상자 가로줄에 들어있는 토마

www.acmicpc.net

[알고리즘풀이]

BFS 탐색을 이용해서, 순회를 진행하고 익지않은토마토가 있는지 없는지 체크한다.

#include<iostream>
#include<queue>

using namespace std;

int box[100][100][100];

// 위 오 아 왼 윗층 아랫층
int x_d[6] = { -1, 0, 1, 0, 0, 0 };
int y_d[6] = { 0, 1, 0, -1, 0, 0 };
int z_d[6] = { 0, 0, 0, 0, 1, -1 };

int BFS(int, int, int, int, int, int);

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);

	queue<int> x, y, z, l;
	int r, c, h;
	cin >> c >> r >> h;

	for(int k = 0; k < h; k++)
		for (int i = 0; i < r; i++)
			for (int j = 0; j < c; j++){
				cin >> box[i][j][k];
				if (box[i][j][k] == 1) {
					x.push(i);
					y.push(j);
					z.push(k);
					l.push(0);
				}
			}

	int max = 0;
	while (!x.empty()) {
		int s_x = x.front(), s_y = y.front(), s_z = z.front(), s_l = l.front();
		x.pop(), y.pop(), z.pop(), l.pop();
		for (int i = 0; i < 6; i++) {
			int n_x = s_x + x_d[i];
			int n_y = s_y + y_d[i];
			int n_z = s_z + z_d[i];
			if (0 <= n_x && n_x < r && 0 <= n_y && n_y < c && 0 <= n_z && n_z < h && box[n_x][n_y][n_z] == 0) {
				box[n_x][n_y][n_z] = 1;
				x.push(n_x);
				y.push(n_y);
				z.push(n_z);
				l.push(s_l + 1);
				if (max < s_l + 1)
					max = s_l + 1;
			}
		}
	}
	for (int i = 0; i < r; i++)
		for (int j = 0; j < c; j++)
			for (int k = 0; k < h; k++) 
				if (box[i][j][k] == 0) {
					cout << "-1";
					return 0;
				}
	cout << max;
	return 0;
}

열심히 공부하고 노력하고 있는 꿈 많은 예비 개발자입니다.

혼자서 공부한 내용을 정리하고 포스팅하다 보니 틀린 내용이 있을 수도 있습니다.

많은 조언과 가르침 주실 분은 댓글로 자유롭게 남겨주셔도 좋을 것 같습니다! 

감사합니다.

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 1541 - 잃어버린 괄호  (0) 2019.08.31
[BOJ] 11758 - CCW  (0) 2019.08.28
[BOJ] 1004 - 어린 왕자  (0) 2019.08.22
[BOJ] 1003 - 피보나치 함수  (0) 2019.08.22
[BOJ] 1697 - Catch That Cow  (0) 2019.08.21

+ Recent posts