π»
[λ°±μ€] DFSμ BFS - 2468. μμ μμ(DFS νμ΄ + BFS νμ΄) λ³Έλ¬Έ
[λ°±μ€] DFSμ BFS - 2468. μμ μμ(DFS νμ΄ + BFS νμ΄)
λν¨λ 2020. 2. 26. 13:38λ¬Έμ
μ¬λλ°©μ¬μ²μμλ λ§μ λΉκ° λ΄λ¦¬λ μ₯λ§μ² μ λλΉν΄μ λ€μκ³Ό κ°μ μΌμ κ³ννκ³ μλ€. λ¨Όμ μ΄λ€ μ§μμ λμ΄ μ 보λ₯Ό νμ νλ€. κ·Έ λ€μμ κ·Έ μ§μμ λ§μ λΉκ° λ΄λ Έμ λ λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ΄ μ΅λλ‘ λͺ κ°κ° λ§λ€μ΄ μ§λ μ§λ₯Ό μ‘°μ¬νλ €κ³ νλ€. μ΄λ, λ¬Έμ λ₯Ό κ°λ¨νκ² νκΈ° μνμ¬, μ₯λ§μ² μ λ΄λ¦¬λ λΉμ μμ λ°λΌ μΌμ ν λμ΄ μ΄νμ λͺ¨λ μ§μ μ λ¬Όμ μ κΈ΄λ€κ³ κ°μ νλ€.
μ΄λ€ μ§μμ λμ΄ μ 보λ νκ³Ό μ΄μ ν¬κΈ°κ° κ°κ° NμΈ 2μ°¨μ λ°°μ΄ ννλ‘ μ£Όμ΄μ§λ©° λ°°μ΄μ κ° μμλ ν΄λΉ μ§μ μ λμ΄λ₯Ό νμνλ μμ°μμ΄λ€. μλ₯Ό λ€μ΄, λ€μμ N=5μΈ μ§μμ λμ΄ μ 보μ΄λ€.
μ΄μ μμ κ°μ μ§μμ λ§μ λΉκ° λ΄λ €μ λμ΄κ° 4 μ΄νμΈ λͺ¨λ μ§μ μ΄ λ¬Όμ μ κ²Όλ€κ³ νμ. μ΄ κ²½μ°μ λ¬Όμ μ κΈ°λ μ§μ μ νμμΌλ‘ νμνλ©΄ λ€μκ³Ό κ°λ€.
λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ΄λΌ ν¨μ λ¬Όμ μ κΈ°μ§ μλ μ§μ λ€μ΄ μ, μλ, μ€λ₯Έμͺ½ νΉμ μΌμͺ½μΌλ‘ μΈμ ν΄ μμΌλ©° κ·Έ ν¬κΈ°κ° μ΅λμΈ μμμ λ§νλ€. μμ κ²½μ°μμ λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ 5κ°κ° λλ€(κΌμ§μ μΌλ‘λ§ λΆμ΄ μλ λ μ§μ μ μΈμ νμ§ μλλ€κ³ μ·¨κΈνλ€).
λν μμ κ°μ μ§μμμ λμ΄κ° 6μ΄νμΈ μ§μ μ λͺ¨λ μ κΈ°κ² λ§λλ λ§μ λΉκ° λ΄λ¦¬λ©΄ λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ μλ κ·Έλ¦Όμμμ κ°μ΄ λ€ κ°κ° λ¨μ νμΈν μ μλ€.
μ΄μ κ°μ΄ μ₯λ§μ² μ λ΄λ¦¬λ λΉμ μμ λ°λΌμ λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ κ°μλ λ€λ₯΄κ² λλ€. μμ μμ κ°μ μ§μμμ λ΄λ¦¬λ λΉμ μμ λ°λ₯Έ λͺ¨λ κ²½μ°λ₯Ό λ€ μ‘°μ¬ν΄ 보면 λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ κ°μ μ€μμ μ΅λμΈ κ²½μ°λ 5μμ μ μ μλ€.
μ΄λ€ μ§μμ λμ΄ μ λ³΄κ° μ£Όμ΄μ‘μ λ, μ₯λ§μ² μ λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ μ΅λ κ°μλ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μλ μ΄λ€ μ§μμ λνλ΄λ 2μ°¨μ λ°°μ΄μ νκ³Ό μ΄μ κ°μλ₯Ό λνλ΄λ μ Nμ΄ μ λ ₯λλ€. Nμ 2 μ΄μ 100 μ΄νμ μ μμ΄λ€. λμ§Έ μ€λΆν° Nκ°μ κ° μ€μλ 2μ°¨μ λ°°μ΄μ 첫 λ²μ§Έ νλΆν° Nλ²μ§Έ νκΉμ§ μμλλ‘ ν νμ© λμ΄ μ λ³΄κ° μ λ ₯λλ€. κ° μ€μλ κ° νμ 첫 λ²μ§Έ μ΄λΆν° Nλ²μ§Έ μ΄κΉμ§ Nκ°μ λμ΄ μ 보λ₯Ό λνλ΄λ μμ°μκ° λΉ μΉΈμ μ¬μ΄μ λκ³ μ λ ₯λλ€. λμ΄λ 1μ΄μ 100 μ΄νμ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ μ₯λ§μ² μ λ¬Όμ μ κΈ°μ§ μλ μμ ν μμμ μ΅λ κ°μλ₯Ό μΆλ ₯νλ€.
μμ μ λ ₯1
5
6 8 2 6 2
3 2 3 4 6
6 7 3 3 2
7 2 5 3 6
8 9 5 2 7
μμ μΆλ ₯1
5
λ ΈνΈ
μ무 μ§μλ λ¬Όμ μ κΈ°μ§ μμ μ μλ€.
μκ°
μμ±ν μ½λ
#include <iostream>
#include <algorithm>
#define MAX 100
using namespace std;
int n,result;
int map[MAX][MAX] = {0, };a
bool visited[MAX][MAX];
// μ,ν,μ’,μ°
int dx[] = { -1, 1, 0, 0 };
int dy[] = { 0, 0, -1, 1 };
void dfs(int x, int y, int height) {
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || ny < 0 || nx >= n || ny >= n){ //λ°°μ΄ μΈλ±μ€ μ λκ²λ
continue;
}
if (map[nx][ny] > height && !visited[nx][ny]){
dfs(nx, ny, height);
}
}
}
int main(int argc, const char * argv[]) {
// insert code here...
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n;
int maxDepth = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> map[i][j];
maxDepth = max(maxDepth, map[i][j]);
}
}
for (int height = 0; height <= maxDepth; height++) {
int safeNum = 0;
memset(visited, 0, sizeof(visited));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (map[i][j] > height && !visited[i][j]) {
dfs(i, j, height);
safeNum++;
}
}
}
result = max(result, safeNum);
}
cout << result << endl;
return 0;
}
+ BFSνμ΄ μΆκ°
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#define MAX 100
using namespace std;
int n,result;
int map[MAX][MAX];
bool visited[MAX][MAX];
// μ,ν,μ’,μ°
int dx[] = { -1, 1, 0, 0 };
int dy[] = { 0, 0, -1, 1 };
void BFS(int a, int b, int h)
{
queue<pair<int, int>> q;
q.push(make_pair(a, b));
visited[a][b] = true;
while (!q.empty())
{
int x = q.front().first;
int y = q.front().second;
q.pop();
for (int i = 0; i < 4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && ny >= 0 && nx < n && ny < n){
if (visited[nx][ny] == false && map[nx][ny] > h){
visited[nx][ny] = true;
q.push(make_pair(nx, ny));
}
}
}
}
}
int main(int argc, const char * argv[]) {
// insert code here...
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n;
int maxDepth = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> map[i][j];
maxDepth = max(maxDepth, map[i][j]);
}
}
for (int height = 0; height <= maxDepth; height++) {
int safeNum = 0;
memset(visited, 0, sizeof(visited));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (map[i][j] > height && !visited[i][j]) {
safeNum++;
BFS(i,j,height);
}
}
}
result = max(result, safeNum);
}
cout << result << endl;
return 0;
}
'μκ³ λ¦¬μ¦ > λ¬Έμ νμ΄ Baekjoon' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 그리λμκ³ λ¦¬μ¦ - 12866. νλ²ν λ°°λ (0) | 2020.02.27 |
---|---|
[λ°±μ€] μ λ ¬ μκ³ λ¦¬μ¦ - 1083. μνΈ (0) | 2020.02.27 |
[λ°±μ€] λμ κ³νλ² - 2579. κ³λ¨ μ€λ₯΄κΈ° (0) | 2020.02.25 |
[λ°±μ€] μ λ ¬ - 2947. λ무 μ‘°κ° (0) | 2020.02.24 |
[λ°±μ€] λ°±νΈλνΉ - 13265. μμΉ νκΈ°(λ¬Έμ νΈλ μ€) (0) | 2020.02.24 |