728x90
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/1844
ํด๊ฒฐ๋ฒ
BFS ๊ธฐ๋ณธ/๋ํ ๋ฌธ์ ๋ค. ์ต๋จ๊ฑฐ๋ฆฌ ์ฐพ๊ธฐ ๋ฌธ์ ์ด๋ฏ๋ก Queue๋ฅผ ์ด์ฉํ BFS ํ์์ ์งํํ๋ฉด ๋๋ค.
์ด ๋, ๊ตฌ์ง ๋ฐฉ๋ฌธ์ฒดํฌ ๋ฐฐ์ด์ ์๋ง๋ค๊ณ ํ์ฌ ๊ฐ์ +1์ ํ๋ฉฐ ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋ ํธํ๊ฒ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
์์๋ ๊ฒ
1) BFS ์ฝ๋
#include <vector>
#include <queue>
#include <utility>//pair queue
using namespace std;
int BFS(vector<vector<int>> maps){
int direction[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};//์ํ์ข์ฐ ๋ฐฉํฅํค
queue<pair<int, int>> q;//BFS ํ์์ ์ํ queue
//ํ์ฌ ์ขํ queue์ ์ถ๊ฐ
q.push(make_pair(0,0));
//queue๊ฐ ๋น ๋๊น์ง ํ์
while(!q.empty()){
//ํ์ฌ queue ๋นผ๊ธฐ ์ ์ ๊ฐ ๋ณ์์ ์ ์ฅํด๋๊ธฐ
int x = q.front().first;
int y = q.front().second;
q.pop();
//์ฃผ๋ณ ํ์. ๋๋ถ๋ถ ์ํ์ข์ฐ ํ์.
for(int k = 0; k < 4; k++){
int nx = x + direction[k][0];
int ny = y + direction[k][1];
//์ด๋ ๊ฐ๋ฅํ ๊ณณ์ด๋ฉด ํด๋น์ขํ๋ฅผ queue์ ๋ฃ๊ธฐ
if(maps[nx][ny] == 1){
maps[nx][ny] = maps[x][y] + 1;
q.push(make_pair(nx,ny));
}
}
}
}
2) pair queue, queue ์ฌ์ฉ๋ฒ
#include <queue>
#include <utility>//pair queue๋ฅผ ์ํด ์ ์ธ
//queue ์ ์ธ. ์ธ์ 2๊ฐ ๋ฃ์๊ฑฐ๋ฉด pair queue๋ก ์์ฑ
queue<pair<int, int>> q;
//q์ pair๊ฐ ๋ฃ๊ธฐ
q.push(make_pair(0,0));
//q์ ์ฒซ๋ฒ์งธ ์์ x, y๊ฐ ๊บผ๋ด๊ธฐ
int x = q.front().first;
int y = q.front().second;
//q ๋งจ ์ ๊ฐ ๊บผ๋ด๊ธฐ
q.pop();
์ฝ๋
#include <vector>
#include <queue>
#include <utility>//pair queue
using namespace std;
int BFS(vector<vector<int>> maps){
int direction[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};//์ํ์ข์ฐ ๋ฐฉํฅํค
queue<pair<int, int>> q;//BFS ํ์์ ์ํ queue
//0,0 ๋ถํฐ ํ์ ์์
q.push(make_pair(0,0));
//queue๊ฐ ๋น ๋๊น์ง ํ์
while(!q.empty()){
int x = q.front().first;
int y = q.front().second;
q.pop();
//์ํ์ข์ฐ ํ์
for(int k = 0; k < 4; k++){
int nx = x + direction[k][0];
int ny = y + direction[k][1];
//๋ฒ์์ฒดํฌ
if(nx < 0 || nx >= maps.size() || ny < 0 || ny >= maps[0].size()) continue;
//์๋ํ ์ง์์ ๋์ฐฉํ๋ค๋ฉด ๋ฐ๋ก ์ ๋ต ๋ฆฌํด. ํจ์จ์ฑ ํ
์คํธ๋ฅผ ์ํด.
if(nx == maps.size()-1 && ny == maps[0].size()-1) return maps[x][y] + 1;
//๊ฐ๋ ๊ธธ์ด 1์ด๋ฉด ํ์ queue์ ์ถ๊ฐ
if(maps[nx][ny] == 1){
maps[nx][ny] = maps[x][y] + 1;
q.push(make_pair(nx,ny));
}
}
//ํ์ฌ ๊ฐ์ + 1 ํ ๊ฐ์ ์ด์ ๋ธ๋ญ์ ๋ฃ์ด์ผ ํ๋ฏ๋ก map[0][0] = 2 ๋ก ๋ง์ถฐ๋๊ธฐ.
if(x == 0 && y == 0) maps[x][y] = 2;
}
//queue๊ฐ ๋น ๋ ๊น์ง ํ์ํ๋๋ฐ ์๋ํ ์ง์์ ๋ชป๋ง๋ฌ๋ค๋ฉด ๊ฐ ์ ์๋ ๊ฒ. return -1.
return -1;
}
int solution(vector<vector<int>> maps){
return BFS(maps);
}
728x90
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][Programmers][DFS/BFS] ๋จ์ด ๋ณํ (0) | 2023.05.07 |
---|---|
[C++][Programmers][DFS/BFS] ๋คํธ์ํฌ (0) | 2023.05.06 |
[C++][Programmers][DFS/BFS] ํ๊ฒ๋๋ฒ (0) | 2023.05.02 |
[C++][Programmers][์์ ํ์] ํผ๋ก๋ (0) | 2023.04.26 |
[C++][Programmers][์์ ํ์] ์นดํซ (0) | 2023.04.24 |