๋์ด๋ : ๊ณจ๋ 3
๊ฑธ๋ฆฐ ์๊ฐ : 30๋ถ
๋ฌธ์
๋ค๋ฆฌ ๋ง๋ค๊ธฐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
ํ์ด
- ๊ฐ์ฅ ์งง์ ๋ค๋ฆฌ์ ๊ธธ์ด == ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ์ ์ฌ์ด์ ์ต๋จ ๊ฑฐ๋ฆฌ
- ๋ชจ๋ ์ฌ ์ฌ์ด์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ํจ
- ๊ฐ ์ฌ์ ์ํ ์ ๋ค๋ก๋ถํฐ ๋ค๋ฅธ ์ฌ์ ์ ๋ค๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
- ๊ฐ์ค์น ์์ผ๋ฏ๋ก bfs ์ด์ฉ
- ๊ฐ ์ฌ์ ์ํ๋ ์ ๋ค์ bfs๋ก ๋ฐ๋ก ์ฐพ๊ธฐ
์ฝ๋
#include <iostream>
#include <queue>
using namespace std;
int map[101][101];
int direction[4][2] = { {1,0}, {0,-1}, {-1, 0}, {0,1} };
vector<vector<pair<int, int>>> colorLand;
int bfs(int land, pair<int, int> start) {
// land์ start ์ ์์ ๋ค๋ฅธ land๊น์ง์ ์ต์ ๊ฑฐ๋ฆฌ (x์ขํ ์ฐจ์ด + y์ขํ ์ฐจ์ด)
int dist = 1e9;
for (int i = land + 1; i < colorLand.size(); i++) {
// land idx ์ด์์ land์์๋ง ์งํํ๋ฉด ๋จ
for (int j = 0; j < colorLand[i].size(); j++) {
pair<int, int> pos = colorLand[i][j];
int distTmp = abs(start.first - pos.first) + abs(start.second - pos.second)-1;
if (distTmp < dist)
dist = distTmp;
}
}
return dist;
}
int main() {
// ์
๋ ฅ
int N; cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> map[i][j];
}
}
// ๊ฐ์ ์ฌ์ ์ํ๋ ์ก์ง ์ฐพ๊ธฐ
queue<pair<int, int>> que;
int colorIdx = -1;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] != 1)
continue;
que.push(make_pair(i, j)); // ์ก์ง ์ ์น ํ๊ธฐ
map[i][j] = 0;
vector<pair<int, int>> tmp; // ์ด๊ธฐํ
colorLand.push_back(tmp);
colorIdx++;
while (!que.empty()) {
pair<int, int> pos = que.front(); que.pop();
colorLand[colorIdx].push_back(pos);
int r = pos.first; int c = pos.second;
for (int k = 0; k < 4; k++) {
int rp = r + direction[k][0];
int cp = c + direction[k][1];
if (rp < 0 || cp < 0 || rp >= N || cp >= N) // ๋งต ๋ฐ์ ์์น
continue;
if (map[rp][cp] != 1) // ์ก์ง๊ฐ ์๋๋ฉด
continue;
que.push(make_pair(rp, cp));
map[rp][cp] = 0; // 0์ผ๋ก ์์ ๋ฒ๋ฆฌ๊ธฐ
}
}
}
}
int minResult = 1e9;
// ์ฌ์ ๊ฐ ์ ๋ง๋ค bfs ๋๋ฆฌ๊ธฐ
for (int i = 0; i < colorLand.size(); i++) { // ๊ฐ ์ฌ๋ง๋ค
for (int j = 0; j < colorLand[i].size(); j++) { // ๊ฐ ์ ๋ง๋ค
int res = bfs(i, colorLand[i][j]);
if (res < minResult)
minResult = res;
}
}
cout << minResult;
}
๊ฒฐ๊ณผ
๋ฌธ์ | ๋ฉ๋ชจ๋ฆฌ | ์๊ฐ | ์ธ์ด | ์ฝ๋ ๊ธธ์ด |
---|---|---|---|---|
gmldms784 | 2472 | 48 | C++17 / ์์ | 2376 |
๋ฐ์ํ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 1525 :: ํผ์ฆ (0) | 2021.05.26 |
---|---|
[c++] BOJ 9019 :: DSLR (0) | 2021.05.26 |
[c++] BOJ 2589 :: ๋ณด๋ฌผ์ฌ (0) | 2021.05.18 |
[c++] BOJ 1707 :: ์ด๋ถ ๊ทธ๋ํ (0) | 2021.05.12 |
[c++] BOJ 2206 :: ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2021.05.11 |
Comment