λ¬Έμ
μ¬λλ°©μ¬μ²μμλ λ§μ λΉκ° λ΄λ¦¬λ μ₯λ§μ² μ λλΉν΄μ λ€μκ³Ό κ°μ μΌμ κ³ννκ³ μλ€. λ¨Όμ μ΄λ€ μ§μμ λμ΄ μ 보λ₯Ό νμ νλ€. κ·Έ λ€μμ κ·Έ μ§μμ λ§μ λΉκ° λ΄λ Έμ λ λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ΄ μ΅λλ‘ λͺ κ°κ° λ§λ€μ΄ μ§λ μ§λ₯Ό μ‘°μ¬νλ €κ³ νλ€. μ΄λ, λ¬Έμ λ₯Ό κ°λ¨νκ² νκΈ° μνμ¬, μ₯λ§μ² μ λ΄λ¦¬λ λΉμ μμ λ°λΌ μΌμ ν λμ΄ μ΄νμ λͺ¨λ μ§μ μ λ¬Όμ μ κΈ΄λ€κ³ κ°μ νλ€.
μ΄λ€ μ§μμ λμ΄ μ λ³΄κ° μ£Όμ΄μ‘μ λ, μ₯λ§μ² μ λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ μ΅λ κ°μλ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμμ€.첫째 μ€μλ μ΄λ€ μ§μμ λνλ΄λ 2μ°¨μ λ°°μ΄μ νκ³Ό μ΄μ κ°μλ₯Ό λνλ΄λ μ Nμ΄ μ λ ₯λλ€. Nμ 2 μ΄μ 100 μ΄νμ μ μμ΄λ€. λμ§Έ μ€λΆν° Nκ°μ κ° μ€μλ 2μ°¨μ λ°°μ΄μ 첫 λ²μ§Έ νλΆν° Nλ²μ§Έ νκΉμ§ μμλλ‘ ν νμ© λμ΄ μ λ³΄κ° μ λ ₯λλ€. κ° μ€μλ κ° νμ 첫 λ²μ§Έ μ΄λΆν° Nλ²μ§Έ μ΄κΉμ§ Nκ°μ λμ΄ μ 보λ₯Ό λνλ΄λ μμ°μκ° λΉ μΉΈμ μ¬μ΄μ λκ³ μ λ ₯λλ€. λμ΄λ 1μ΄μ 100 μ΄νμ μ μμ΄λ€.
νμ΄
μ²΄ν¬ ν¬μΈνΈ
λ¬Έμ μμ μ£Όμ΄μ§ μμμ νλ ¬μ κΈΈμ΄μΈ 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 |