๋ฌธ์
2468๋ฒ: ์์ ์์ญ
์ฌ๋๋ฐฉ์ฌ์ฒญ์์๋ ๋ง์ ๋น๊ฐ ๋ด๋ฆฌ๋ ์ฅ๋ง์ฒ ์ ๋๋นํด์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ๊ณํํ๊ณ ์๋ค. ๋จผ์ ์ด๋ค ์ง์ญ์ ๋์ด ์ ๋ณด๋ฅผ ํ์ ํ๋ค. ๊ทธ ๋ค์์ ๊ทธ ์ง์ญ์ ๋ง์ ๋น๊ฐ ๋ด๋ ธ์ ๋ ๋ฌผ์ ์ ๊ธฐ์ง ์๋
www.acmicpc.net
์ฌ๋๋ฐฉ์ฌ์ฒญ์์๋ ๋ง์ ๋น๊ฐ ๋ด๋ฆฌ๋ ์ฅ๋ง์ฒ ์ ๋๋นํด์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ๊ณํํ๊ณ ์๋ค. ๋จผ์ ์ด๋ค ์ง์ญ์ ๋์ด ์ ๋ณด๋ฅผ ํ์ ํ๋ค. ๊ทธ ๋ค์์ ๊ทธ ์ง์ญ์ ๋ง์ ๋น๊ฐ ๋ด๋ ธ์ ๋ ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ด ์ต๋๋ก ๋ช ๊ฐ๊ฐ ๋ง๋ค์ด ์ง๋ ์ง๋ฅผ ์กฐ์ฌํ๋ ค๊ณ ํ๋ค. ์ด๋, ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ๊ฒ ํ๊ธฐ ์ํ์ฌ, ์ฅ๋ง์ฒ ์ ๋ด๋ฆฌ๋ ๋น์ ์์ ๋ฐ๋ผ ์ผ์ ํ ๋์ด ์ดํ์ ๋ชจ๋ ์ง์ ์ ๋ฌผ์ ์ ๊ธด๋ค๊ณ ๊ฐ์ ํ๋ค.
์ด๋ค ์ง์ญ์ ๋์ด ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ์ฅ๋ง์ฒ ์ ๋ฌผ์ ์ ๊ธฐ์ง ์๋ ์์ ํ ์์ญ์ ์ต๋ ๊ฐ์๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.์ฒซ์งธ ์ค์๋ ์ด๋ค ์ง์ญ์ ๋ํ๋ด๋ 2์ฐจ์ ๋ฐฐ์ด์ ํ๊ณผ ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ N์ด ์ ๋ ฅ๋๋ค. N์ 2 ์ด์ 100 ์ดํ์ ์ ์์ด๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ๊ฐ ์ค์๋ 2์ฐจ์ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ํ๋ถํฐ N๋ฒ์งธ ํ๊น์ง ์์๋๋ก ํ ํ์ฉ ๋์ด ์ ๋ณด๊ฐ ์ ๋ ฅ๋๋ค. ๊ฐ ์ค์๋ ๊ฐ ํ์ ์ฒซ ๋ฒ์งธ ์ด๋ถํฐ N๋ฒ์งธ ์ด๊น์ง N๊ฐ์ ๋์ด ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์์ฐ์๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ ๋ ฅ๋๋ค. ๋์ด๋ 1์ด์ 100 ์ดํ์ ์ ์์ด๋ค.
ํ์ด
๊ณต์ ์์ค ๋ณด๊ธฐ
www.acmicpc.net
์ฒดํฌ ํฌ์ธํธ
๋ฌธ์ ์์ ์ฃผ์ด์ง ์์ญ์ ํ๋ ฌ์ ๊ธธ์ด์ธ N ๋ง ์๋ ค์ค ์ฒ์์๋ ๊ฐ์๋(๋น๊ฐ ์จ ๋์ด)๋ฅผ N ์ ๊ธฐ์ค์ผ๋ก ์ผ๋ ๊ฒ์ผ๋ก ์ดํดํ๋ค.
ํ์ง๋ง ๋ค์ ์ดํด๋ณด๋ฉด ์์ ํ ์์ญ์ด ์ต๋์ธ ๊ฐ์ ์ถ๋ ฅํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฃผ์ด์ง ์ง์ญ ๋ณ ๋์ด๋ฅผ Set ์๋ฃํ์ ๋ด์์ ์ค๋ณต์ ์ ๊ฑฐํ์ฌ ๊ฐ ๋์ด ๋ณ ์์ ์์ญ์ ๊ฐ์๋ฅผ ๊ณ์ฐํ๊ณ ์ด๋ฅผ Vector ์ ๋ด๋๋ก ํ๋ค.
(์ด ๋, ๋๋ DFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ๊ตฌํ ํ๋๋ฐ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ํ ์ ์๋์ง ๋ด์ผ๊ฒ ๋ค.)
์ด ํ, Vector ์ ๋ด๊ธด ์ฃผ์ด์ง ๋์ด ๋ณ ์์ ์์ญ ๊ฐ์ ์ค ์ต๋๊ฐ๋ง ์ถ๋ ฅํ๋ฉด ๋๋ค.
#include <bits/stdc++.h>
using namespace std;
int n;
int adj[104][104], visited[104][104];
int dy[] = {-1, 0, 1, 0};
int dx[] = {0, 1, 0, -1};
set<int> range;
void dfs(int y, int x, int height) {
visited[y][x] = 1;
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (ny < 0 || nx < 0 || ny >= n || nx >= n) continue;
if (adj[ny][nx] < height) continue;
if (!visited[ny][nx]) dfs(ny, nx, height);
}
}
int main() {
// ์ง์ญ์ ํ๋ ฌ ๊ธธ์ด
cin >> n;
for (int y = 0; y < n; y++) {
for (int x = 0; x < n; x++) {
cin >> adj[y][x];
range.insert(adj[y][x]);
}
}
vector<int> result;
for (int height : range) {
int cnt = 0;
for (int y = 0; y < n; y++) {
for (int x = 0; x < n; x++) {
if (adj[y][x] >= height && !visited[y][x]) {
cnt++;
dfs(y, x, height);
}
}
}
result.push_back(cnt);
memset(visited, 0, sizeof(visited));
}
cout << *max_element(result.begin(), result.end());
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 2583] ์์ญ ๊ตฌํ๊ธฐ (0) | 2023.05.11 |
---|---|
[๋ฐฑ์ค 1012] ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2023.05.08 |
[๋ฐฑ์ค 4375] 1 (0) | 2023.04.23 |
[๋ฐฑ์ค 3986] ์ข์ ๋จ์ด (0) | 2023.04.18 |
[๋ฐฑ์ค 1940] ์ฃผ๋ชฝ (0) | 2023.04.17 |