Notice
Recent Posts
Recent Comments
Link
Tags
- golang
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- C++
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋ฆฌ์จ๋ณด๋ฉ
- go
- LCs
- ์น๋ฆฐ์ด
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ๋ค์ต์คํธ๋ผ
- ์์ฝ๋
- ์ด๋ถํ์
- ๋นํธ๋งต
- ์ํฐ๋
- Union-Find
- BFS
- nestjs
- ์ฌ๊ท
- DP
- ๋นํธ๋ง์คํน
- ํ๋ก๊ทธ๋๋จธ์ค
- Python
- ์นด์นด์ค ์ฝํ
- DFS
- js
- ์นด์นด์ค2021
- ํธ๋ฆฌ
- ๋ฐฑ์ค
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
Archives
- Today
- Total
Hello Ocean! ๐ผ
[๋ฐฑ์ค/C++] 2146. ๋ค๋ฆฌ ๋ง๋ค๊ธฐ ๋ณธ๋ฌธ
๋ฐ์ํ
๋ฌธ์
https://www.acmicpc.net/problem/2146
๊ฐ๊ฐ์ ์ฌ(์ก์ง ๋ฉ์ด๋ฆฌ?)์์ ๋ค๋ฅธ ์ฌ ๊น์ง ๊ฐ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์ค์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค!
ํ์ด
DFS์ BFS๋ฅผ ๋ชจ๋ ์ด์ฉํ๋ค.
๋จผ์ , ๊ฐ ์ฌ๋ค์ ๋ฒํธ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด DFS๋ฅผ ๋๋ ธ๋ค.
๊ทธ ํ์ BFS๋ฅผ ๋๋ ค์ ์ด๋ค ์ฌ์์ ๋ ๋ค๋ฅธ ์ฌ๊น์ง ๊ฐ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ ํ์, ๊ทธ ์ค์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
๋งต์ ํฌ๊ธฐ(n)์ด 100์ดํ์ด๊ธฐ ๋๋ฌธ์ input์ด ์์์ ์๊ฐ์ด๊ณผ ๊ฑฑ์ ์์ด ํ์๋ค.
์ฝ๋
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
#define LAND 1
#define SEA 0
int dr[4] = { -1,1,0,0 };
int dc[4] = { 0,0,-1,1 };
int map[101][101] = { 0, };
bool visited[101][101] = { 0, };
int n;
void DFS(int r, int c, int num) {
visited[r][c] = true;
map[r][c] = num; //๋ช๋ฒ ์ฌ์ธ์ง ํ์
for (int i = 0;i < 4;i++) {
int next_r = r + dr[i];
int next_c = c + dc[i];
if (next_r >= n || next_r < 0 || next_c >= n || next_c < 0) continue;
if (map[next_r][next_c] && !visited[next_r][next_c])
DFS(next_r, next_c, num);
}
}
int BFS(int cnt) {
queue<pair<int, int>> q;
//ํ์ ํด๋น ๋ฒํธ์ ์ฌ์ ์ขํ๋ฅผ ๋ค ๋ฃ๊ธฐ
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (map[i][j] == cnt) {
visited[i][j] = true;
q.push(make_pair(i, j));
}
}
}
int result = 0;
while (!q.empty()){
int curSize = q.size();
//ํ์ฌ ํ์ ์๋ ์นธ์์ ํ์นธ์ฉ ์ ์ง
for (int i = 0; i < curSize; i++) {
int r = q.front().first;
int c = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int next_r = r + dr[i];
int next_c= c + dc[i];
//๋ฒ์ ๋ด์ ์๋์ง ๊ฒ์ฌ
if (0 <= next_r && next_r < n && 0 <= next_c && next_c < n) {
//๋ค๋ฅธ ์ฌ์ ๋์ฐฉํ๋ฉด return
if (map[next_r][next_c] && map[next_r][next_c] != cnt)
return result;
//๋ฐฉ๋ฌธํ์ง ์์ ๋ฐ๋ค์ด๋ฉด ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์ ํ ํ์ ๋ฃ๊ธฐ
else if (map[next_r][next_c] == SEA && !visited[next_r][next_c]) {
visited[next_r][next_c] = true;
q.push(make_pair(next_r, next_c));
}
}
}
}
result++;
}
}
int main(void) {
cin >> n;
for (int r = 0;r < n;r++) {
for (int c = 0;c < n;c++) {
cin >> map[r][c];
}
}
int num = 1;
for (int r = 0;r < n;r++) {
for (int c = 0;c < n;c++) {
if (map[r][c] == LAND && !visited[r][c]) {
DFS(r, c, num);
num++;
}
}
}
int min_dist = 987654321;
for (int i = 1;i<num;i++) {
fill(&visited[0][0], &visited[100][101], 0);
min_dist = min(min_dist, BFS(i));
}
cout << min_dist << endl;
return 0;
}
๊ฒฐ๊ณผ
๋ฐ์ํ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 9019. DSLR (0) | 2021.05.26 |
---|---|
[๋ฐฑ์ค/C++] 1525. ํผ์ฆ (0) | 2021.05.26 |
[๋ฐฑ์ค/C++] 2589. ๋ณด๋ฌผ์ฌ (0) | 2021.05.19 |
[๋ฐฑ์ค/C++] 1707. ์ด๋ถ๊ทธ๋ํ (0) | 2021.05.12 |
[๋ฐฑ์ค/C++] 2206. ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2021.05.12 |