• Home
  • About
    • on Weekend photo

      on Weekend

      ๐™Ž๐™ฉ๐™ช๐™™๐™ฎ๐™ž๐™ฃ๐™œ

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • ํ•„์‚ฌ
  • Projects

[๋ฐฑ์ค€] 7569 (C++)

30 Nov 2020

๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธ
์ฝ”๋“œ๋กœ ๋ฐ”๋กœ ๋‚ด๋ ค๊ฐ€๋ ค๋ฉด ํด๋ฆญ

ํ’€์ด

๐Ÿ’Ž๋ฌธ์ œ ์ œ๋ชฉ : ํ† ๋งˆํ† 
๐Ÿ’Ž์นดํ…Œ๊ณ ๋ฆฌ : ๊ทธ๋ž˜ํ”„ ์ด๋ก 
๐Ÿ’Žํ’€์ด :
N ์„ธ๋กœ, M ๊ฐ€๋กœ, H ๋†’์ด, 1 ์ต์€ํ† ๋งˆํ† , 0์ต์ง€์•Š์€ํ† ๋งˆํ† , -1ํ† ๋งˆํ† ๊ฐ€ ์—†๋Š” ์นธ
ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚˜๋ฉด, ํ•˜๋‚˜์˜ ์ต์€ ํ† ๋งˆํ† ์— ์ธ์ ‘ํ•œ(์œ„, ์•„๋ž˜, ์™ผ, ์˜ค, ์•ž, ๋’ค) ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋Š” ์ต๊ฒŒ ๋œ๋‹ค. ์ฐฝ๊ณ ์— ๋ณด๊ด€๋œ ํ† ๋งˆํ† ๋“ค์ด ๋ฉฐ์น ์ด ์ง€๋‚˜๋ฉด ๋‹ค ์ต๋Š”์ง€ โ€˜์ตœ์†Œ ์ผ์ˆ˜โ€™

๋‚ด๊ฐ€ ๋ฐฐ์šด ๊ฒƒ

๋‚ ์งœ ๊ตฌํ•˜๊ธฐ

BFS๋ฅผ ๋Œ๋ฆด ๋•Œ MAP์— ์ˆซ์ž๋ฅผ ๋„ฃ์–ด์„œ ํ•˜๋ฉด ๋์—ˆ๋‹ค. -1, 0, 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ 3์ฐจ์› ๋ฐฐ์—ด์ด์—ˆ๊ณ  1์ด ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋Š” ๊ฒƒ, 0์ด ์—†๋Š” ๊ฒƒ์ด์—ˆ์œผ๋‹ˆ 0์ผ ๊ฒฝ์šฐ์—๋Š” โ€˜์˜ํ–ฅ์„ ๋ฐ›์€ ํ† ๋งˆํ† โ€™+1๋ฅผ ํ•ด๋‹น ์ž๋ฆฌ์— ํ• ๋‹นํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
๊ฐ€๋ น 1์ผ ์งธ์— ์ต๋Š” ํ† ๋งˆํ† ๋“ค์€, ์ต์–ด์žˆ๋Š”(=1) ํ† ๋งˆํ† ์— ์˜ํ–ฅ์„ ๋ฐ›์œผ๋ฏ€๋กœ 1์„ ๋”ํ•ด 2๋ฅผ ์ €์žฅํ•˜๊ณ ,
2์ผ ์งธ์— ์ต๋Š” ํ† ๋งˆํ† ๋“ค์€ ์ต์–ด์žˆ๋Š”(=2) ํ† ๋งˆํ† ์— 1์„ ๋”ํ•ด 3์„ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.
๊ทธ ํ›„ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์— 1์„ ๋นผ์ฃผ๋ฉด ๋œ๋‹ค.

์‹ค์ˆ˜ํ•˜์ง€ ๋ง๊ธฐ
if (MAP[h][n][m] == 0) {
  cout << -1; return 0;
}

์ฝ”๋“œ ๋‚ด๋ถ€ main ๋งจ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ€๋Š” ์œ„์˜ if๋ฌธ์€ โ€˜ํ•˜๋‚˜๋ผ๋„ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋‹ค๋ฉดโ€™ -1๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๋„์ค‘ -1์ด ์•„๋‹Œ 0์„ coutํ•ด์ฃผ์–ด์„œ ์ž ์‹œ ํ—ค๋งธ์—ˆ๋‹ค. ํ•˜ํ•„ TC์—๋„ ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด์—ˆ๋‹ค.
๊ผญ! ๋ฌธ์ œ์—์„œ ์ถ”๋ก  ๊ฐ€๋Šฅํ•œ ๊ทน์ ์ด๊ณ  ๊ฐ„๋‹จํ•œ ๋ชจ๋“  ์˜ˆ์ œ๋ฅผ ๋Œ๋ ค๋ณด๋„๋ก ํ•˜์ž.

๐ŸŽ‰

์ฝ”๋“œ

#include "pch.h"

/*
๋ฌธ์ œ ์ œ๋ชฉ : ํ† ๋งˆํ† 
์นดํ…Œ๊ณ ๋ฆฌ : ๊ทธ๋ž˜ํ”„ ์ด๋ก 
ํ’€์ด :
	N ์„ธ๋กœ, M ๊ฐ€๋กœ, H ๋†’์ด, 1 ์ต์€ํ† ๋งˆํ† , 0์ต์ง€์•Š์€ํ† ๋งˆํ† , -1ํ† ๋งˆํ† ๊ฐ€ ์—†๋Š”์นธ
	ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚˜๋ฉด, ํ•˜๋‚˜์˜ ์ต์€ ํ† ๋งˆํ† ์— ์ธ์ ‘ํ•œ(์œ„, ์•„๋ž˜, ์™ผ, ์˜ค, ์•ž, ๋’ค) ์ต์ง€ ์•Š์€
	ํ† ๋งˆํ† ๋Š” ์ต๊ฒŒ ๋œ๋‹ค. ์ฐฝ๊ณ ์— ๋ณด๊ด€๋œ ํ† ๋งˆํ† ๋“ค์ด ๋ฉฐ์น ์ด ์ง€๋‚˜๋ฉด ๋‹ค ์ต๋Š”์ง€ '์ตœ์†Œ ์ผ์ˆ˜'
*/
#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;

const int MAX = 101;
int N, M, H;
int res;
int MAP[MAX][MAX][MAX]; // 10^6๊ฐœ

queue < pair<int, pair<int, int>>> q;

bool isIn(int h, int n, int m)
{
	return (h >= 0 && h < H) && (n >= 0 && n < N) && (m >= 0 && m < M);
}

int dir[6][3] = { {0,-1,0},{0,1,0},{0,0,1},{0,0,-1},{-1,0,0},{1,0,0} };

void BFS()
{

	while (!q.empty())
	{
		int h = q.front().first;
		int n = q.front().second.first;
		int m = q.front().second.second;
		q.pop();
		for (int d = 0; d < 6; d++)
		{
			int dh = h + dir[d][0];
			int dn = n + dir[d][1];
			int dm = m + dir[d][2];

			if (isIn(dh, dn, dm) && MAP[dh][dn][dm] == 0) {
				MAP[dh][dn][dm] = MAP[h][n][m] + 1;
				res = max(res, MAP[h][n][m]);
				//cout << res << endl;
				q.push(make_pair(dh, make_pair(dn, dm)));
			}
		}
	}
	return;
}
int main()
{
	res = 0;
	int tomato_n = 0;
	cin >> M >> N >> H;
	for(int h=0; h<H; h++)
		for(int n=0;n<N;n++)
			for (int m = 0; m < M; m++) {
				cin >> MAP[h][n][m];
				if (MAP[h][n][m] == 1) q.push(make_pair(h, make_pair(n, m)));
				if (MAP[h][n][m] != -1) tomato_n++;
			}

	if ( (!q.empty()) && (q.size() == tomato_n))
	{
		cout << 0;
		return 0;
	}
	if (q.empty())
	{
		cout << -1;
		return 0;
	}
	BFS();

	for (int h = 0; h < H; h++)
		for (int n = 0; n < N; n++)
			for (int m = 0; m < M; m++) {
				if (MAP[h][n][m] == 0) {
					cout << -1; return 0;
				}
			}

	cout << res;
	return 0;
}



problem_solvingc++ Share Tweet +1