๐Ÿ˜Š4179๋ฒˆ. ๋ถˆ! _240404 ํ‹€๋ฆผ

phoenixKimยท2022๋…„ 8์›” 22์ผ
0

๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
76/174

์ตœ๊ทผ ์ ‘๊ทผ ๋ฐฉ๋ฒ• 241130

  • ๊ตณ์ด ์ง€ํ›ˆ์ด bfs ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ถˆ์ „์ฒด์— ๋Œ€ํ•ด bfs ํ•˜๋Š” ๊ฑฐ๋ฅผ ๋™์‹œ์— ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
    : ์ง€ํ›ˆ์ด ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ฐฑ์‹ ํ•˜๊ณ , ๋ถˆ ์ „์ฒด์— ๋Œ€ํ•ด ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์ง„ํ–‰ํ•˜๊ธฐ์—๋Š” ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค....

https://www.acmicpc.net/submit/4179/87026900

  • ์ƒ๊ฐํ•ด๋ณด์ž.
    1) ๋ถˆ F์— ๋Œ€ํ•ด 2์ฐจ์› ๋ฒกํ„ฐ fireTable์— ๋Œ€ํ•ด ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
    2) ์ง€ํ›ˆ์ด F์— ๋Œ€ํ•ด 2์ฐจ์› ๋ฒกํ„ฐ jihoonTable์— ๋Œ€ํ•œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
    3) 1๊ณผ 2์—์„œ ๊ตฌํ•œ 2๊ฐœ์˜ table์„ ๋น„๊ตํ•˜๋Š” ์‹œํ€€์Šค๋กœ ์ง„ํ–‰ํ•˜๊ณ , ์ง€ํ›ˆ์ด๊ฐ€ ํ…Œ๋‘๋ฆฌ์— ๋„์ฐฉํ•œ table๊ฐ’์ด firetable๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๋ฏธ๋กœ ํƒˆ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


์ตœ๊ทผํ’€์ด : 240404 ํ‹€๋ฆผ

์ „๋žต

  • ํ‹€๋ฆฐ ์ƒ๊ฐ
    : ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๋‚˜๋Š” ์ง€ํ›ˆ์ด bfs ์ฒ˜๋ฆฌ ํ›„, ๋ถˆ bfs ์ด๋™ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ
    ์ด๋Ÿฐ์‹์œผ๋กœ ํ•˜๊ธฐ์—๋Š” ๊ฐ ํ 2๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”๋ฐ,
    ์‹œํ€€์Šค ์ž‘์„ฑ์„ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

  • ํฐ๋Œ๋‹˜ ๊ฐ•์˜๋ฅผ ๋ณธํ›„ ์ „๋žต ์ˆ˜์ •
    : ์–ด์จ‹๋“  ์ง€ํ›ˆ์ด๋Š” ํ…Œ๋‘๋ฆฌ๋ฅผ ํ–ฅํ•ด์„œ ํƒˆ์ถœํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ๊ฐ ์ •์ ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋กœ ํ–ฅํ•˜๋Š” ๊ฒƒ๊ณผ
    ๋ถˆ์ด ํ•ด๋‹น ์ •์ ์œผ๋กœ ๋ฒˆ์ ธ๋‚˜๊ฐ€๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๋ฉด
    ์ง€ํ›ˆ์ด๊ฐ€ ๋ฏธ๋กœ๋ฅผ ํ†ต๊ณผ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๋…ผ๋ฆฌ์ ์ธ ์ƒ๊ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ์˜ˆ์‹œ.

  • ์ง€ํ›ˆ์ด๊ฐ€ ์ด๋™ํ• ์ˆ˜ ์žˆ๋Š” ๊ฐ ์ •์ ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” ์ด๋ ‡๋‹ค.

  • ๊ทธ๋Ÿฌ๋ฉด ๋ถˆ์˜ ๊ฐ ์ •์ ์—์„œ์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋Š”?

  • ์ง€ํ›ˆ์ด์˜ ๋นจ๊ฐ„ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ณผ ๋ถˆ์˜ ํŒŒ๋ž€ ์ตœ๋‹จ ๊ฒฝ๋กœ๋Š” ๋น„๊ตํ•˜๋ฉด
    : ํ…Œ๋‘๋ฆฌ๋ฅผ ํ†ตํ•ด ํ†ต๊ณผํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ง€ํ›ˆ์ด๋Š” ์ขŒ์ธก ํ•˜๋‹จ์˜ 2๋ฅผ ํ†ตํ•ด
    ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ง€ํ›ˆ์ด์˜ ์ž…์žฅ์—์„œ 3์— ํ•ด๋‹นํ•˜๋Š” ์ •์ ์ด ๋ถˆ์˜ ์ž…์žฅ์—์„œ ๋ณด๋ฉด, 2์ด๊ธฐ ๋•Œ๋ฌธ์—
    3์œผ๋กœ๋Š” ์ ˆ๋Œ€ ํ†ต๊ณผํ•  ์ˆ˜ ์—†๋‹ค. ๋ถˆ์— ํƒ€ ์ฃฝ์Œ...

-> ์ด๊ฑฐ๋ฅผ ์—ผ๋‘ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.
: ์—ฌ๊ธฐ์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ ๋ถˆ์„ ๋จผ์ € ํ™•์ƒํ•ด์„œ ํŒŒ๋ž€์ƒ‰์ˆซ์ž๋Œ€๋กœ
์ €์žฅ์„ ํ•ด๋†“๊ณ , ๋นจ๊ฐ„์ƒ‰ 3์€ ์ง„ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ•ด๋‹น ์ •์ ์€ ๋ถˆ์˜ ๊ฒฝ๋กœ๋ณด๋‹ค
๋” ๊ธธ๊ธฐ ๋•Œ๋ฌธ์—


์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

: bfs

ํ’€์ด๋ฒ• : ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง€์ง€ ์•Š์•˜์ฐŒ๋งŒ,
๋ถˆ์„ ๋จผ์ € ์ด๋™ํ•˜๊ณ , ์ง€ํ›ˆ์ด๋ฅผ ์ด๋™์‹œ์ผœ์•ผ ํ•จ.
๋งจ ๋ฐ‘์— ๋ฐ˜๋ก€ ์žˆ์Œ.
https://www.acmicpc.net/board/view/63687

๋‚ด๊ฐ€ ๋งŒ๋“  ์ฝ”๋“œ๋Œ€๋กœ ํ•˜๋ฉด ํƒˆ์ถœ์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ/

RESULT : ์ด๋•Œ ์ง€ํ›ˆ์ด๋Š” ํƒˆ์ถœ์„ ๋ชปํ•ด์•ผ ํ•จ.

์™œ ํƒˆ์ถœ์„ ๋ชปํ•ด์•ผ ํ•˜๋ƒ๋ฉด?
๋…ผ๋ฆฌ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด, '.' ์ด์žˆ๋Š” ๋ถ€๋ถ„์— ๋ถˆ๊ณผ ์ง€ํ›ˆ์ด๊ฐ€ ๋ชจ๋‘ ์˜ฌ์ˆ˜ ์žˆ์Œ.
๊ทธ๋Ÿผ ์ง€ํ›ˆ์ด๋Š” ํƒˆ์ถœ์„ ๋ชปํ•˜๊ฒŒ ๋˜๋Š” ์ƒํ™ฉ์ž„.
๋”ฐ๋ผ์„œ ๋ถˆ์„ ๋จผ์ € ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๋งž์Œ.

์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ

-> 58ํผ์„ผํŠธ ์—์„œ ํ‹€๋ฆผ.

ํ˜„์žฌ ์ง€ํ›ˆ์ด๋ฅผ ๋จผ์ € ์ด๋™ํ•œ ํ›„์—, ๋ถˆ์„ ์ด๋™์‹œ์ผฐ์Œ..
์ด์ œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค.

#include <iostream>
#include <vector>
using namespace std;
#include <algorithm>
#include <queue>
#include <string>
// 15:50

// ์ƒํ•˜์ขŒ์šฐ 
int dy[]{ -1,1,0,0 };
int dx[]{ 0,0,-1,1 };

int n, m;
// ์ง€ํ›ˆ์ด๊ฐ€ ๋จผ์ € ์ด๋™ํ•ด์•ผ ํ•จ.
// ์ง€ํ›ˆ์ด๋Š” ๋ถˆ์ด ์•„๋‹Œ ๊ณณ, ๋ฒฝ์ด ์•„๋‹Œ๊ณณ, ์œผ๋กœ๋งŒ ์›€์ง์ผ ์ˆ˜ ์žˆ๊ณ ,
// ์ง€ํ›ˆ์ด๋Š” ๋ฏธ๋กœ ๊ฐ€์žฅ์ž๋ฆฌ์—์„œ ํƒˆ์ถœ์ด ๊ฐ€๋Šฅํ•จ. ํƒˆ์ถœํ• ๋•Œ์˜ ์ตœ๋‹จ ์‹œ๊ฐ„์„ 
// ์•Œ์•„์•ผ ํ•จ.
void bfs(vector<vector<char>>&v, vector<vector<bool>>&_check,
	pair<int,int>&_jh, vector<pair<int,int>>&f)
{
	//๋ฒฝ์€ ๋ณ€ํ•˜์ง€ ์•Š์Œ.
	// ์ถ”๊ฐ€๋˜์ง€๋„ ์•Š์Œ.

	// . ๊ณต๊ฐ„์€ ๋ถˆ์ด ๋  ์ˆ˜ ์žˆ์Œ.

	queue < pair<pair<int, int> , int> >qF;
	for (auto iter : f)
	{
		qF.push(make_pair(make_pair(iter.first, iter.second), 0));
	}

	queue<pair<pair<int, int> , int>>pos;
	pos.push(make_pair(make_pair(_jh.first, _jh.second), 0));
	_check[_jh.first][_jh.second] = true;

	// ์ง€ํ›ˆ์ด๊ฐ€ ์ด๋™์™„๋ฃŒ๋œ ๋ถ€๋ถ„์€ ์ฒดํฌ๋ถˆ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

	while (!pos.empty())
	{
		int curY = pos.front().first.first;
		int curX = pos.front().first.second;
		int cnt = pos.front().second;
		
		pos.pop();

		// ๋งŒ์•ฝ์— ์ง€ํ›ˆ์ด๊ฐ€ ํ…Œ๋‘๋ฆฌ ๋„์ฐฉ์‹œ ๊ทธ๋ƒฅ ๋.
		if (curY == 0 || curY == n -1
			|| curX == 0 || curX == m - 1)
		{
			cout << cnt + 1;
			return;
		}

		


		// ์ง€ํ›ˆ์ด๊ฐ€ ์žˆ๋˜ ์œ„์น˜๋Š” . ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ.
		v[curY][curX] = '.';

		// ์ง€ํ›ˆ์ด ์ด๋™ ๋ถ€ํ„ฐ.
		for (int i = 0; i < 4; ++i)
		{
			int nextY = curY + dy[i];
			int nextX = curX + dx[i];

			//ํ…Œ๋‘๋ฆฌ ํ™•์ธ
			if (nextY < 0 || nextY >= n
				|| nextX < 0 || nextX >= m)			
				continue;			
			// ๋ฒฝ ํ™•์ธ 
			if (v[nextY][nextX] == '#' 
				|| v[nextY][nextX] == 'F')
				continue;
			
			// ์ด๋™ํ• ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋ถˆ์ฒดํฌ
			if (_check[nextY][nextX] == true)
				continue;

			// ์ง€๋‚˜๊ฐˆ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ผ ๊ฒฝ์šฐ์— ์ด๋™ํ•จ
			if (v[nextY][nextX] == '.')
			{
				pos.push(make_pair(make_pair(nextY, nextX),
					cnt + 1));
				_check[nextY][nextX] = true;
			}
		}

		// ๋ถˆ ํ™•์‚ฐ์„ ํ•ด์•ผํ•จ. 
		
		// ์ผ๋‹จ qF์— ์žˆ๋Š” ๊ฒƒ๋“ค์„ ํ™•์‚ฐํ•ด์•ผ ํ•จ.
		// 2๋ฒˆ์งธ ์ธ์ž์— ์žˆ๋Š” ๊ฐ’์„ ํ†ตํ•ด์„œ๋งŒ ํ™•์‚ฐ ์™„๋ฃŒ
		// ๊ทธ ์ดํ›„์—๋Š” ๋›ฐ์ณ ๋‚˜์™€์•ผ ํ•จ.
		while (!qF.empty())
		{
			// ์นด์šดํŒ… ํšŸ์ˆ˜์™€ ๋น„๊ตํ•ด์„œ ์ผ์น˜ํ•œ ์นด์šดํŠธ๋งŒ ๋Œ๋ ค์•ผ ํ•จ.
			int cntF = qF.front().second;
			if (cnt != cntF)
				break;

			int curFY = qF.front().first.first;
			int curFX = qF.front().first.second;

			qF.pop();

			// ๋ถˆํ™•์‚ฐ.
			for (int i = 0; i < 4; ++i)
			{
				int nextFY = curFY + dy[i];
				int nextFX = curFX + dx[i];

				//ํ…Œ๋‘๋ฆฌ ํ™•์ธ
				if (nextFY < 0 || nextFY >= n
					|| nextFX < 0 || nextFX >= m)
					continue;
				// ๋ฒฝ ํ™•์ธ 
				if (v[nextFY][nextFX] == '#'
					|| v[nextFY][nextFX] == 'F')
					continue;

				// ๋ฒฝ ์•„๋‹ˆ๊ณ , ๋ถˆ์ด ์•„๋‹Œ ๋ถ€๋ถ„์„ ๋ถˆ๋กœ ๋งŒ๋“ค์–ด ๋ฒ„๋ฆผ.
				
				v[nextFY][nextFX] = 'F';
				qF.push(make_pair(make_pair(nextFY, nextFX), cntF + 1));

			}


		}



	}

	// ์ง€ํ›ˆ์ด๊ฐ€ ํƒˆ์ถœํ•  ์ˆ˜ ์—†์„๋•Œ ์ƒ๊ฐํ•ด์•ผ ํ•จ.
	cout << "IMPOSSIBLE";


}

int main() 
{
	// ๋ฏธ๋กœ์˜ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ํƒˆ์ถœ ๊ณต๊ฐ„์ž„.

	// ๋ถˆ๊ณผ ์ง€ํ›ˆ์ด 1์ดˆ๋งˆ๋‹ค ์ด๋™ํ•จ.
	// ๋ถˆ์„ ๋จผ์ € ํ™•์‚ฐํ•ด์•ผ ํ•จ.

	
	cin >> n >> m;

	vector<vector<char>>v(n, vector<char>(m));

	//์ง€ํ›ˆ์ด์˜ ์ดˆ๊ธฐ ์œ„์น˜
	// ๋ถˆ์˜ ์ดˆ๊ธฐ ์œ„์น˜
	pair<int, int>jihoon;
	vector<pair<int, int>>fire;

	// ์ง€ํ›ˆ์ด๊ฐ€ ์ด๋™์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋Š” ๋ถˆ๋ณ€์ˆ˜
	vector<vector<bool>>check(n, vector<bool>(m));

	for (int i = 0; i < n; ++i)
	{
		string word;
		cin >> word;

		for (int j = 0; j < m; ++j)
		{
			v[i][j] = word[j];

			if (v[i][j] == 'J')
			{
				jihoon.first = i;
				jihoon.second = j;
			}

			if (v[i][j] == 'F')
			{
				fire.push_back(make_pair(i, j));
			}
		}
	}

	//cout << jihoon.first << ' ' << jihoon.second << endl;
	//
	//for (auto iter : fire)
	//{
	//	cout << iter.first << ' ' << iter.second << endl;
	//}
	bfs(v, check, jihoon, fire);
}

์™„๋ฃŒ ์ฝ”๋“œ



#include <iostream>
#include <vector>
using namespace std;
#include <algorithm>
#include <queue>
#include <string>
// 15:50

// ์ƒํ•˜์ขŒ์šฐ 
int dy[]{ -1,1,0,0 };
int dx[]{ 0,0,-1,1 };

int n, m;
// ์ง€ํ›ˆ์ด๊ฐ€ ๋จผ์ € ์ด๋™ํ•ด์•ผ ํ•จ.
// ์ง€ํ›ˆ์ด๋Š” ๋ถˆ์ด ์•„๋‹Œ ๊ณณ, ๋ฒฝ์ด ์•„๋‹Œ๊ณณ, ์œผ๋กœ๋งŒ ์›€์ง์ผ ์ˆ˜ ์žˆ๊ณ ,
// ์ง€ํ›ˆ์ด๋Š” ๋ฏธ๋กœ ๊ฐ€์žฅ์ž๋ฆฌ์—์„œ ํƒˆ์ถœ์ด ๊ฐ€๋Šฅํ•จ. ํƒˆ์ถœํ• ๋•Œ์˜ ์ตœ๋‹จ ์‹œ๊ฐ„์„ 
// ์•Œ์•„์•ผ ํ•จ.
void bfs(vector<vector<char>>&v, vector<vector<bool>>&_check,
	pair<int,int>&_jh, vector<pair<int,int>>&f)
{
	//๋ฒฝ์€ ๋ณ€ํ•˜์ง€ ์•Š์Œ.
	// ์ถ”๊ฐ€๋˜์ง€๋„ ์•Š์Œ.

	// . ๊ณต๊ฐ„์€ ๋ถˆ์ด ๋  ์ˆ˜ ์žˆ์Œ.

	queue < pair<pair<int, int> , int> >qF;
	for (auto iter : f)
	{
		qF.push(make_pair(make_pair(iter.first, iter.second), 0));
	}

	queue<pair<pair<int, int> , int>>pos;
	pos.push(make_pair(make_pair(_jh.first, _jh.second), 0));
	_check[_jh.first][_jh.second] = true;

	// ์ง€ํ›ˆ์ด๊ฐ€ ์ด๋™์™„๋ฃŒ๋œ ๋ถ€๋ถ„์€ ์ฒดํฌ๋ถˆ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

	while (!pos.empty())
	{
		int curY = pos.front().first.first;
		int curX = pos.front().first.second;
		int cnt = pos.front().second;
		// ๋ถˆ ํ™•์‚ฐ์„ ํ•ด์•ผํ•จ. 
		
		// ์ผ๋‹จ qF์— ์žˆ๋Š” ๊ฒƒ๋“ค์„ ํ™•์‚ฐํ•ด์•ผ ํ•จ.
		// 2๋ฒˆ์งธ ์ธ์ž์— ์žˆ๋Š” ๊ฐ’์„ ํ†ตํ•ด์„œ๋งŒ ํ™•์‚ฐ ์™„๋ฃŒ
		// ๊ทธ ์ดํ›„์—๋Š” ๋›ฐ์ณ ๋‚˜์™€์•ผ ํ•จ.
		while (!qF.empty())
		{
			// ์นด์šดํŒ… ํšŸ์ˆ˜์™€ ๋น„๊ตํ•ด์„œ ์ผ์น˜ํ•œ ์นด์šดํŠธ๋งŒ ๋Œ๋ ค์•ผ ํ•จ.
			int cntF = qF.front().second;
			if (cnt != cntF)
				break;

			int curFY = qF.front().first.first;
			int curFX = qF.front().first.second;

			qF.pop();

			// ๋ถˆํ™•์‚ฐ.
			for (int i = 0; i < 4; ++i)
			{
				int nextFY = curFY + dy[i];
				int nextFX = curFX + dx[i];

				//ํ…Œ๋‘๋ฆฌ ํ™•์ธ
				if (nextFY < 0 || nextFY >= n
					|| nextFX < 0 || nextFX >= m)
					continue;
				// ๋ฒฝ ํ™•์ธ 
				if (v[nextFY][nextFX] == '#'
					|| v[nextFY][nextFX] == 'F')
					continue;

				// ๋ฒฝ ์•„๋‹ˆ๊ณ , ๋ถˆ์ด ์•„๋‹Œ ๋ถ€๋ถ„์„ ๋ถˆ๋กœ ๋งŒ๋“ค์–ด ๋ฒ„๋ฆผ.
				
				v[nextFY][nextFX] = 'F';
				qF.push(make_pair(make_pair(nextFY, nextFX), cntF + 1));

			}


		}

		// ์—ฌ๊ธฐ๋กœ ์˜ฎ๊น€
		pos.pop();

		// ๋งŒ์•ฝ์— ์ง€ํ›ˆ์ด๊ฐ€ ํ…Œ๋‘๋ฆฌ ๋„์ฐฉ์‹œ ๊ทธ๋ƒฅ ๋.
		if (curY == 0 || curY == n - 1
			|| curX == 0 || curX == m - 1)
		{
			cout << cnt + 1;
			return;
		}




		// ์ง€ํ›ˆ์ด๊ฐ€ ์žˆ๋˜ ์œ„์น˜๋Š” . ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•จ.
		v[curY][curX] = '.';

		// ์ง€ํ›ˆ์ด ์ด๋™ ๋ถ€ํ„ฐ.
		for (int i = 0; i < 4; ++i)
		{
			int nextY = curY + dy[i];
			int nextX = curX + dx[i];

			//ํ…Œ๋‘๋ฆฌ ํ™•์ธ
			if (nextY < 0 || nextY >= n
				|| nextX < 0 || nextX >= m)
				continue;
			// ๋ฒฝ ํ™•์ธ 
			if (v[nextY][nextX] == '#'
				|| v[nextY][nextX] == 'F')
				continue;

			// ์ด๋™ํ• ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋ถˆ์ฒดํฌ
			if (_check[nextY][nextX] == true)
				continue;

			// ์ง€๋‚˜๊ฐˆ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ผ ๊ฒฝ์šฐ์— ์ด๋™ํ•จ
			if (v[nextY][nextX] == '.')
			{
				pos.push(make_pair(make_pair(nextY, nextX),
					cnt + 1));
				_check[nextY][nextX] = true;
			}
		}


	}

	// ์ง€ํ›ˆ์ด๊ฐ€ ํƒˆ์ถœํ•  ์ˆ˜ ์—†์„๋•Œ ์ƒ๊ฐํ•ด์•ผ ํ•จ.
	cout << "IMPOSSIBLE";


}

int main() 
{
	// ๋ฏธ๋กœ์˜ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ํƒˆ์ถœ ๊ณต๊ฐ„์ž„.

	// ๋ถˆ๊ณผ ์ง€ํ›ˆ์ด 1์ดˆ๋งˆ๋‹ค ์ด๋™ํ•จ.
	// ๋ถˆ์„ ๋จผ์ € ํ™•์‚ฐํ•ด์•ผ ํ•จ.

	
	cin >> n >> m;

	vector<vector<char>>v(n, vector<char>(m));

	//์ง€ํ›ˆ์ด์˜ ์ดˆ๊ธฐ ์œ„์น˜
	// ๋ถˆ์˜ ์ดˆ๊ธฐ ์œ„์น˜
	pair<int, int>jihoon;
	vector<pair<int, int>>fire;

	// ์ง€ํ›ˆ์ด๊ฐ€ ์ด๋™์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋Š” ๋ถˆ๋ณ€์ˆ˜
	vector<vector<bool>>check(n, vector<bool>(m));

	for (int i = 0; i < n; ++i)
	{
		string word;
		cin >> word;

		for (int j = 0; j < m; ++j)
		{
			v[i][j] = word[j];

			if (v[i][j] == 'J')
			{
				jihoon.first = i;
				jihoon.second = j;
			}

			if (v[i][j] == 'F')
			{
				fire.push_back(make_pair(i, j));
			}
		}
	}

	//cout << jihoon.first << ' ' << jihoon.second << endl;
	//
	//for (auto iter : fire)
	//{
	//	cout << iter.first << ' ' << iter.second << endl;
	//}
	bfs(v, check, jihoon, fire);
}

profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด