#pragma warning (disable: 4996)
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int N, X;
int T;
void init_map(int m[][21])
{
for (int i = 0; i < 21; i++)
{
memset(m[i], 0, sizeof(m[i]));
}
}
int check_arr(int arr[])
{
int installed[21] = { 0, };
int able = 1;
int pre = arr[0];
for (int i = 1; i < N; i++)
{
int tem = arr[i];
if (pre == tem)
continue;
if (tem != pre && abs(tem - pre) > 1) //차이가 1이상
{
return 0;
}
else if (tem - pre == 1) // check left left is lower
{
if (i - X >= 0)
{
for (int j = i - X; j < i; j++)
{
if (installed[j] == 1)
return 0;
if (arr[j] != pre)
return 0;
}
}
else return 0;
}
else if (pre - tem == 1) //check right // right is lower
{
if (i + X - 1 < N)
{
int k;
int pos = 1;
for (k = i + 1; k < N; k++)
{
if (arr[k] != tem)
break;
if (arr[k] == tem)
pos++;
}
if (pos < X)
return 0;
else if (pos >= X)
{
for (int t = i; t < i + X; t++)
{
installed[t] = 1;
}
}
i = k - 1;
}
else return 0;
}
pre = arr[i];
}
return able;
}
int check(int m[][21])
{
int cnt = 0;
for (int i = 0; i < N; i++)
cnt += check_arr(m[i]);
return cnt;
}
int main()
{
scanf("%d", &T);
for (int i = 0; i < T; i++)
{
N = 0;
X = 0;
int map[21][21];
int map_c_r[21][21];
init_map(map);
init_map(map_c_r);
scanf("%d %d", &N, &X);
for (int j = 0; j < N; j++)
{
for (int k = 0; k < N; k++)
{
int num = 0;
scanf("%d", &num);
map[j][k] = num;
map_c_r[k][j] = num;
}
}
int ans = check(map) + check(map_c_r);
printf("\n#%d %d\n", i + 1, ans);
}
}
728x90
'코테 > SW Expert Academy' 카테고리의 다른 글
sample_input.txt 파일에서 데이터 추출하기 (0) | 2022.07.12 |
---|---|
6109. 추억의 2048게임 (0) | 2022.04.28 |
5656. [모의 SW 역량테스트] 벽돌 깨기 (0) | 2022.03.29 |
13475. 동선 추적 (2) | 2022.02.20 |
4408. 자기 방으로 돌아가기 (0) | 2022.02.08 |