๐Ÿ˜Š14497๋ฒˆ. ์ฃผ๋‚œ์˜ ๋‚œ _ ํ 2๊ฐœ

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

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

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

์–ธ์ œ ํ๋ฅผ 2๊ฐœ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๊ฐ€?

์›์†Œ์˜ ์ƒํƒœ๊ฐ’์ด 2๊ฐœ๋‹ค ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ํ๋ฅผ 2๊ฐœ ์‚ฌ์šฉํ•ด๋ณผ๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜์ž.

  • 1) ๊ณ ์ •๋œ ์œ„์น˜์—์„œ ํƒ์ƒ‰์„ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, ๋ณ€๊ฒฝ๋œ ์œ„์น˜์—์„œ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ผ ๊ฒฝ์šฐ

  • 2) ํ์— ๋„ฃ๋Š” ํšŸ์ˆ˜๊ฐ€ popํ•˜๋Š” ํšŸ์ˆ˜๋ณด๋‹ค ๋” ๋งŽ์€๋ฐ, ์ถ”๊ฐ€์ ์œผ๋กœ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋œ ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์–ด์•ผ ํ•  ๊ฒฝ์šฐ.

ํ๋ฅผ ์™œ 2๊ฐœ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€?

1. ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘์‹œํ‚ค๊ธฐ

: ์ฃผ๋‚œ์ด์˜ ์œ„์น˜๊ฐ€ ํ˜„์žฌ ๊ณ ์ •๋˜์–ด ์žˆ์Œ.
'#' ์„ ๋งŒ๋‚ ๋•Œ ๋™์•ˆ ๊ณ ์ •๋œ ์œ„์น˜์—์„œ ์ ํ”„๋ฅผ ๊ณ„์†ํ•˜๋Š” ๊ฒƒ์€
์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ์ง€์ ์„ ๋˜ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž„.
๊ทธ๋ž˜์„œ 1์„ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด, ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์žฌ์‹œ์ž‘ ํ•˜๋ผ๋Š” ์˜๋ฏธ์ž„.
์ด๋Ÿฐ์‹์œผ๋กœ ํ•ด์•ผ ๋ฒ”์ธ์„ ์žก๋Š”๋ฐ ํ›จ์”ฌ ์šฉ์ดํ•จ.
0์ธ ๊ฒฝ์šฐ์— ๊ณ„์†ํ•ด์„œ 1์„ ๋งŒ๋‚ ๋•Œ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ณ ,
1์„ temp์— ๋„ฃ์–ด ๋†“๊ณ , ํ•ด๋‹น temp๋ฅผ ์ด์šฉํ•ด์„œ ์žฌ์‹œ์ž‘!
์ด๋ ‡๊ฒŒ ๋˜๋ฉด, ์ฃผ๋‚œ์ด์˜ ์œ„์น˜๋ณด๋‹ค ๋” ๋ฉ€๋ฆฌ ๋ฐ”๊นฅ์œผ๋กœ ํผ์ง€๊ฒŒ ๋จ.
๋ฒ”์ธ์„ ์žก๋Š”๋ฐ ํ›จ์”ฌ ์ข‹์Œ.

  • ๋ฐฑ์กฐ์™€ ํ˜ธ์ˆ˜์™€ ๋™์ผํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ์ž„.

2. ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ.

  • ํ•˜๋‚˜์˜ ํ์—๋‹ค๊ฐ€ ๋„ฃ์–ด๋„ ๋˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ์ด์Šˆ๊ฐ€ ์ƒ๊น€.

    : ์•„๋ž˜์—์„œ์ฒ˜๋Ÿผ ํ•˜๋‚˜๋งŒ ๋„ฃ์–ด๋„ 40๋ฐ”์ดํŠธ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š”๋ฐ,
    0์ด ๋งŽ์€ ๋ถ€๋ถ„์—์„œ ๋˜ 1์ด ์žˆ๋Š” ์›์†Œ์˜ ์œ„์น˜๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์€ ํšจ์œจ์ ์ด์ง€ ์•Š์Œ.
    ์ด๋ ‡๊ฒŒ ๋˜๋ฉด, ๋์—†์ด ๊ณ„์† ํ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์Œ“์ด๊ฒŒ ๋จ.
    ์™œ๋ƒ ํ•˜๋ฉด ๋์— ๋ฒ”์ธ์ด ์žˆ์„ ๊ฒฝ์šฐ, ํ๊ฐ€ popํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค 0,1 ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ
    pushํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ๋” ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    -์˜ˆ์‹œ์—์„œ๋Š” 0๊ณผ 1์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์ง€ ์•Š์ง€๋งŒ, ๋ฒ”์ธ์ด ์ € ๋์— ์žˆ์œผ๋ฉด, ํ์˜ ๋ฉ”๋ชจ๋ฆฌ ์–ด๋งˆ์–ด๋งˆ ํ•ด์ง..

  • pair๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ ํ์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š”?
    : ํ•œ๊ฐœ๋งŒ ๋„ฃ์—ˆ๋Š”๋ฐ๋„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ํผ. : 8๋ฐ”์ดํŠธ ํ•˜์ง€ ์•Š์„๊นŒ???

0์„ ๋งŒ๋‚˜๋ฉด 1์„ ๋งŒ๋‚ ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ํ ํ‘ธ์‰ฌ ํŒ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋จ.
๊ทธ๋Ÿฌ๋‹ค๊ฐ€ 1์„ ๋งŒ๋‚œ ์ƒํƒœ์—์„œ 0์„ ๋งŒ๋“ค๊ณ , ๋˜ ์‚ฝ์ž…์„ ํ•˜๊ฒŒ๋  ๊ฒฝ์šฐ,
ํ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปค์ง€๊ฒŒ๋จ.

์–ธ์ œํ’ˆ?

: 220911 15:43 ~ 16:41

    1. ๋™์ผํ•œ ํ์—๋‹ค๊ฐ€ ๋„ฃ๊ณ  ์ œ์ถœํ–ˆ๋Š”๋ฐ, 7ํผ์„ผํŠธ์—์„œ ํ‹€๋ฆผ.
    1. ๋‹นํ™ฉํ•˜์ง€ ๋ง๊ณ , ์ƒํƒœ๊ฐ’์— ๋”ฐ๋ผ ํ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๋ฉด๋จ.

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

: bfs, ํŠน์ดํ•œ ๋ฌธ์ œ, ๋ ˆ๋ฒจ ๋ถ„๋ฅ˜๋กœ ์ธํ•œ ํ 2๊ฐœ ์‚ฌ์šฉ

์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•  ๊ฒƒ์ธ๊ฐ€?

๋ฌธ์ œ ๋งจ ์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋•Œ

1) ๋ฌธ์ œ๋ฅผ ์ฝ์–ด ๋ดค์„ ๋•Œ, ์ฃผ๋‚œ์ด๊ฐ€ 1์„ ๋งŒ๋‚˜๋ฉด, 1 -> 0์œผ๋กœ ๋ณ€๊ฒฝ์„ ํ•จ.
2) ๊ทธ๋ฆฌ๊ณ  ์นด์šดํŒ…์„ 1์ฆ๊ฐ€ํ•จ.
3) ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ๋˜ ๋“ค์–ด๊ฐ€์„œ ํ์—๋‹ค๊ฐ€ ๋Œ๋ฆฌ๋ฉด์„œ 1๋งŒ๋‚˜๋ฉด,
๋˜ ๋›ฐ์ณ๋‚˜์™€์„œ ์นด์šดํŒ…์„ 1์ฆ๊ฐ€ํ• ๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ๋จ.

1. ๋‹ค๋ฅธ ๊ณ ์ฐฐ

1) ์œ„์˜ ์ƒ๊ฐ๋Œ€๋กœ ํ•ด๋„ ๋˜์ง€๋งŒ, 0์ด๋“ , 1์ด๋“  ๊ทธ๋ƒฅ
ํ์—๋‹ค๊ฐ€ ํ•œ๋ฒˆ์— ๋„ฃ์–ด์„œ ์ฒ˜๋ฆฌํ•ด๋„ ๋˜์ง€ ์•Š์„๊นŒ? ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋จ.

  • ๊ฒฐ๊ณผ : ํ์— ์—„์ฒญ ๋“ค์–ด๊ฐ€์„œ ๋ฉ”๋ชจ๋ฆฌ ํ„ฐ์ง€๋Š” ๋“ฏํ•จ.

2. ๋‹ค๋ฅธ ๊ณ ์ฐฐ

1) ํ˜„์žฌ 1์ธ ๊ฒฝ์šฐ์™€ 0์ธ ๊ฒฝ์šฐ, ์ฆ‰ ๋ ˆ๋ฒจ์ด ๋‹ค๋ฆ„.
2) ๋ ˆ๋ฒจ์„ ๊ตฌ๋ถ„์œผ๋กœ ํ•ด์„œ ๋‹ค๋ฅธ ํ๋กœ ๋‚˜๋‰˜์–ด์„œ ์ง„ํ–‰ํ•˜์ž.
3) ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณ„์† ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด , while(1) ์„ ์ถ”๊ฐ€ํ•จ.

์™„๋ฃŒ ํ’€์ด


#include <algorithm>
#include <string>
#include <vector>
#include<iostream>
#include <queue>

using namespace std;

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

int n, m;
int x, y, x2, y2;


void bfs(vector<vector<char>>&v,
	vector<vector<int>>&visited)
{
	// ์›์†Œ์˜ ํƒ€์ž…์€ charํ˜•์ž„. 

	//๋ถˆ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ†ตํ•ด์„œ ๋ช‡๋ฒˆ์˜ ์นด์šดํŒ…์œผ๋กœ 
	// #์— ๋„๋‹ฌํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜์ž. 

	queue<pair<int, int>>q;

	// ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์˜ -1์”ฉ ํ•ด์•ผ ํ•จ.
	q.push(make_pair(y - 1, x - 1));

	visited[y - 1][x - 1] = 1;

	queue<pair<int, int>> temp;


	//while (v[y2 - 1][x2 - 1] != '0')
    // ์œ„์˜ ๋ฌดํ•œ๋ฌธ์€ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ. 
	while (1)
	{
		while (!q.empty())
		{
			int curY = q.front().first;
			int curX = q.front().second;

			q.pop();

			//visited[curY][curX] = 1;

			if (v[curY][curX] == '#')
			{
				cout << visited[curY][curX];
				return;
			}

			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 (visited[nextY][nextX] != 0)
					continue;

				// v์˜ ์›์†Œ๊ฐ€ 0์ธ ๊ฒฝ์šฐ์™€ 1์ธ ๊ฒฝ์šฐ๊ฐ€ ๋‹ค๋ฆ„. 
				// ๋‚ด ์ƒ๊ฐ์—์„œ๋Š” 0์ธ ๊ฒฝ์šฐ์—๋Š” ์นด์šดํŒ…์„ ํ•˜์ง€ ๋ง๊ณ .
				// 1์ธ ๊ฒฝ์šฐ์—๋งŒ ์นด์šดํŒ…์„ ํ•จ. 
				if (v[nextY][nextX] == '1')
				{
					v[nextY][nextX] = '0';
					visited[nextY][nextX] = visited[curY][curX] + 1;
					//q.push(make_pair(nextY, nextX));
					temp.push(make_pair(nextY, nextX));
				}
				else if (v[nextY][nextX] == '0')
				{
					visited[nextY][nextX] = visited[curY][curX];
					q.push(make_pair(nextY, nextX));

				}
				else if (v[nextY][nextX] == '#')
				{
					visited[nextY][nextX] = visited[curY][curX];
					q.push(make_pair(nextY, nextX));
				}

			}
		}
		q = temp;
	}


}





//20: 53 ~ 21:51
// 7ํผ์„ผํŠธ์—์„œ ํ‹€๋ฆผ.
int main()
{
	//1์ธ ์›์†Œ๋“ค์„ 0์œผ๋กœ ๋ณ€๊ฒฝํ•จ. 

	// 1์ธ ์›์†Œ๋ฅผ ์ฐพ์œผ๋ฉด ์นด์šดํŒ…์„ ์ง„ํ–‰ํ•จ. 

	// ์ธ์ ‘ํ•œ ๊ฒƒ๋“ค ์ค‘์— 0์ธ ์›์†Œ๋ฅผ ๋งŒ๋‚˜๋ฉด, ์นด์šดํŒ…์€ ์•ˆํ•จ. 

	cin >> n >> m;
	cin >> y >> x >> y2 >> x2;

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


	for (int i = 0; i < n; ++i)
	{
		string ss;
		cin >> ss;
		for (int j = 0; j < m; ++j)
		{
			v[i][j] = ss[j];
		}
	}

	bfs(v, visited);



}

์žฌํ’€์ด

: 13:29 ~ 13:42

๋งž์™œํ‹€

: ํ์—๋‹ค๊ฐ€ ๋งˆ๊ตฌ ๋„ฃ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋œ ๋“ฏ ํ•จ.

๋ฌธ์ œํ’€์ด

: ๋งŒ์•ฝ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด?
-> intํ˜• ํ•˜๋‚˜๋งŒ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐ์„ ํ•ด๋ณด์ž.
์ง€๊ธˆ ๋ฌธ์ œ๊ฐ€ ์ด๋Ÿฌํ•œ ์œ ํ˜•์ž„.
y ๊ฐ’, x๊ฐ’์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜์˜ ์ถ•์— * 1000 ๋˜๋Š” ํŠน์ • ๊ฑฐ๋Œ€ํ•œ ๊ฐ’์„ ๋”ํ•˜๊ณ ,
๋‹ค๋ฅธ ์ถ•์€ ๊ทธ๋ƒฅ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ .

  • ์ตœ๋Œ€ ๋ฒ”์œ„๋ณด๋‹ค ์ข€ ๋” ํฐ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์„œ ์ ‘๊ทผํ•ด์•ผ ํ•จ.

์ฒซ๋ฒˆ์งธ ํ’€์ด

: 7ํผ์„ผํŠธ์—์„œ ํ‹€๋ฆผ.
-> ์•„๋ฌด๋ž˜๋„ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผํ•œ๋“ฏ ํ•จ..


#include <algorithm>
#include <string>
#include <vector>
#include<iostream>
#include <queue>

using namespace std;

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

int n, m;
int x, y, x2, y2;


void bfs(vector<vector<char>>&v,
	vector<vector<int>>&visited)
{
	// ์›์†Œ์˜ ํƒ€์ž…์€ charํ˜•์ž„. 

	//๋ถˆ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ†ตํ•ด์„œ ๋ช‡๋ฒˆ์˜ ์นด์šดํŒ…์œผ๋กœ 
	// #์— ๋„๋‹ฌํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜์ž. 

	queue<pair<int, int>>q;

	// ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์˜ -1์”ฉ ํ•ด์•ผ ํ•จ.
	q.push(make_pair(y - 1, x - 1));

	visited[y - 1][x - 1] = 1;

	while (!q.empty())
	{
		int curY = q.front().first;
		int curX = q.front().second;

		q.pop();

		//visited[curY][curX] = 1;

		if (v[curY][curX] == '#')
		{
			cout << visited[curY][curX];
			return;
		}

		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 (visited[nextY][nextX] != 0)
				continue;

			// v์˜ ์›์†Œ๊ฐ€ 0์ธ ๊ฒฝ์šฐ์™€ 1์ธ ๊ฒฝ์šฐ๊ฐ€ ๋‹ค๋ฆ„. 
			// ๋‚ด ์ƒ๊ฐ์—์„œ๋Š” 0์ธ ๊ฒฝ์šฐ์—๋Š” ์นด์šดํŒ…์„ ํ•˜์ง€ ๋ง๊ณ .
			// 1์ธ ๊ฒฝ์šฐ์—๋งŒ ์นด์šดํŒ…์„ ํ•จ. 
			if (v[nextY][nextX] == '1')
			{
				visited[nextY][nextX] = visited[curY][curX] + 1;
				q.push(make_pair(nextY, nextX));
			}
			else if (v[nextY][nextX] == '0')
			{
				visited[nextY][nextX] = visited[curY][curX];
				q.push(make_pair(nextY, nextX));

			}
			else if (v[nextY][nextX] == '#')
			{
				visited[nextY][nextX] = visited[curY][curX];
				q.push(make_pair(nextY, nextX));
			}

		}



	}


	cout << "hello" << endl;

}





//20: 53 ~ 21:51
// 7ํผ์„ผํŠธ์—์„œ ํ‹€๋ฆผ.
int main()
{
	//1์ธ ์›์†Œ๋“ค์„ 0์œผ๋กœ ๋ณ€๊ฒฝํ•จ. 

	// 1์ธ ์›์†Œ๋ฅผ ์ฐพ์œผ๋ฉด ์นด์šดํŒ…์„ ์ง„ํ–‰ํ•จ. 

	// ์ธ์ ‘ํ•œ ๊ฒƒ๋“ค ์ค‘์— 0์ธ ์›์†Œ๋ฅผ ๋งŒ๋‚˜๋ฉด, ์นด์šดํŒ…์€ ์•ˆํ•จ. 

	cin >> n >> m;
	cin >> y >> x >> y2 >> x2;

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


	for (int i = 0; i < n; ++i)
	{
		string ss;
		cin >> ss;
		for (int j = 0; j < m; ++j)
		{
			v[i][j] = ss[j];
		}
	}

	bfs(v, visited);



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

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

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