반응형
#include<iostream>
#include<queue>
#include<string.h>
using namespace std;
int N;
int arr[100][100];
bool visit[100][100];
int main(int argc, char** argv)
{
int test_case;
int T;
cin >> T;
/*
여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
*/
for (test_case = 1; test_case <= T; ++test_case)
{
cin >> N;
int m = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
cin >> arr[i][j];
if (m < arr[i][j])
{
m = arr[i][j];
}
}
}
int result = 1;
for (int k = 1; k < m; k++)
{
memset(visit, 0, sizeof(visit));
int count = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (!visit[i][j] && arr[i][j] > k)
{
count++;
visit[i][j] = true;
queue<pair<int, int> > que;
que.push({ i,j });
while (!que.empty())
{
int y = que.front().first;
int x = que.front().second;
que.pop();
if (y - 1 >= 0 && !visit[y - 1][x] && arr[y - 1][x] > k)
{
visit[y - 1][x] = true;
que.push({ y - 1,x });
}
if (y + 1 < N && !visit[y + 1][x] && arr[y + 1][x] > k)
{
visit[y + 1][x] = true;
que.push({ y + 1,x });
}
if (x - 1 >= 0 && !visit[y][x - 1] && arr[y][x - 1] > k)
{
visit[y][x - 1] = true;
que.push({ y ,x - 1 });
}
if (x + 1 < N && !visit[y][x + 1] && arr[y][x + 1] > k)
{
visit[y][x + 1] = true;
que.push({ y ,x + 1 });
}
}
}
}
}
if (result < count)
{
result = count;
}
}
cout << "#" << test_case << " " << result << endl;
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
반응형
'Algorithm' 카테고리의 다른 글
백준 1120번 문자열 (0) | 2020.07.05 |
---|---|
백준 12865번 평범한 배낭 oo (0) | 2020.07.05 |
1232. [S/W 문제해결 기본] 9일차 - 사칙연산 (0) | 2020.06.04 |
3074. 입국심사 (0) | 2020.06.03 |
백준 2206번 벽 부수고 이동하기 (0) | 2020.06.01 |