์์์ ์ํ๊ฐ์ด 2๊ฐ๋ค ๋ผ๊ณ ํ๋ค๋ฉด, ํ๋ฅผ 2๊ฐ ์ฌ์ฉํด๋ณผ๊น? ๋ผ๋ ์๊ฐ์ ํ์.
1) ๊ณ ์ ๋ ์์น์์ ํ์์ ํ๋ ๊ฒ๋ณด๋ค, ๋ณ๊ฒฝ๋ ์์น์์ ํ์ํ๋ ๊ฒ์ด ํจ์จ์ ์ผ ๊ฒฝ์ฐ
2) ํ์ ๋ฃ๋ ํ์๊ฐ popํ๋ ํ์๋ณด๋ค ๋ ๋ง์๋ฐ, ์ถ๊ฐ์ ์ผ๋ก ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ฃ์ด์ผ ํ ๊ฒฝ์ฐ.
: ์ฃผ๋์ด์ ์์น๊ฐ ํ์ฌ ๊ณ ์ ๋์ด ์์.
'#' ์ ๋ง๋ ๋ ๋์ ๊ณ ์ ๋ ์์น์์ ์ ํ๋ฅผ ๊ณ์ํ๋ ๊ฒ์
์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ง์ ์ ๋ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ ๊ฒ์.
๊ทธ๋์ 1์ ๋ง๋๊ฒ ๋๋ฉด, ์ฌ๊ธฐ์๋ถํฐ ์ฌ์์ ํ๋ผ๋ ์๋ฏธ์.
์ด๋ฐ์์ผ๋ก ํด์ผ ๋ฒ์ธ์ ์ก๋๋ฐ ํจ์ฌ ์ฉ์ดํจ.
0์ธ ๊ฒฝ์ฐ์ ๊ณ์ํด์ 1์ ๋ง๋ ๋๊น์ง ์งํํ๋ ๊ฒ์ด๊ณ ,
1์ temp์ ๋ฃ์ด ๋๊ณ , ํด๋น temp๋ฅผ ์ด์ฉํด์ ์ฌ์์!
์ด๋ ๊ฒ ๋๋ฉด, ์ฃผ๋์ด์ ์์น๋ณด๋ค ๋ ๋ฉ๋ฆฌ ๋ฐ๊นฅ์ผ๋ก ํผ์ง๊ฒ ๋จ.
๋ฒ์ธ์ ์ก๋๋ฐ ํจ์ฌ ์ข์.
ํ๋์ ํ์๋ค๊ฐ ๋ฃ์ด๋ ๋์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ์ด์๊ฐ ์๊น.
: ์๋์์์ฒ๋ผ ํ๋๋ง ๋ฃ์ด๋ 40๋ฐ์ดํธ๋ฅผ ์ฐจ์งํ๊ณ ์๋๋ฐ,
0์ด ๋ง์ ๋ถ๋ถ์์ ๋ 1์ด ์๋ ์์์ ์์น๋ฅผ ๋ฃ๋ ๊ฒ์ ํจ์จ์ ์ด์ง ์์.
์ด๋ ๊ฒ ๋๋ฉด, ๋์์ด ๊ณ์ ํ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ด๊ฒ ๋จ.
์๋ ํ๋ฉด ๋์ ๋ฒ์ธ์ด ์์ ๊ฒฝ์ฐ, ํ๊ฐ popํ๋ ๊ฒ๋ณด๋ค 0,1 ์์์ ์ธ๋ฑ์ค๋ฅผ
pushํ๋ ํ์๊ฐ ๋ ๋ง์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
-์์์์๋ 0๊ณผ 1์ ๊ฐ์๊ฐ ๋ง์ง ์์ง๋ง, ๋ฒ์ธ์ด ์ ๋์ ์์ผ๋ฉด, ํ์ ๋ฉ๋ชจ๋ฆฌ ์ด๋ง์ด๋ง ํด์ง..
pair๋ฅผ ๋ฃ์์ ๋ ํ์ ๋ฉ๋ชจ๋ฆฌ๋?
: ํ๊ฐ๋ง ๋ฃ์๋๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๊ฐ๋ณด๋ค ํผ. : 8๋ฐ์ดํธ ํ์ง ์์๊น???
0์ ๋ง๋๋ฉด 1์ ๋ง๋ ๋๊น์ง ๊ณ์ํด์ ํ ํธ์ฌ ํ ์์ ์ ํ๊ฒ ๋จ.
๊ทธ๋ฌ๋ค๊ฐ 1์ ๋ง๋ ์ํ์์ 0์ ๋ง๋ค๊ณ , ๋ ์ฝ์ ์ ํ๊ฒ๋ ๊ฒฝ์ฐ,
ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ปค์ง๊ฒ๋จ.
: 220911 15:43 ~ 16:41
: bfs, ํน์ดํ ๋ฌธ์ , ๋ ๋ฒจ ๋ถ๋ฅ๋ก ์ธํ ํ 2๊ฐ ์ฌ์ฉ
1) ๋ฌธ์ ๋ฅผ ์ฝ์ด ๋ดค์ ๋, ์ฃผ๋์ด๊ฐ 1์ ๋ง๋๋ฉด, 1 -> 0์ผ๋ก ๋ณ๊ฒฝ์ ํจ.
2) ๊ทธ๋ฆฌ๊ณ ์นด์ดํ
์ 1์ฆ๊ฐํจ.
3) ๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ ๋ค์ด๊ฐ์ ํ์๋ค๊ฐ ๋๋ฆฌ๋ฉด์ 1๋ง๋๋ฉด,
๋ ๋ฐ์ณ๋์์ ์นด์ดํ
์ 1์ฆ๊ฐํ ๊น? ๋ผ๋ ์๊ฐ์ ํ๊ฒ๋จ.
1) ์์ ์๊ฐ๋๋ก ํด๋ ๋์ง๋ง, 0์ด๋ , 1์ด๋ ๊ทธ๋ฅ
ํ์๋ค๊ฐ ํ๋ฒ์ ๋ฃ์ด์ ์ฒ๋ฆฌํด๋ ๋์ง ์์๊น? ์๊ฐ์ ํ๊ฒ ๋จ.
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);
}