#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int row, col, cnt;
scanf("%d %d", &row, &col);
char **matrix = malloc(sizeof(char *) * row + 1);
for (int i = 0; i < col; i++)
{
matrix[i] = malloc(sizeof(char) * col + 1);
}
for (int i = 0; i < row; i++)
{
scanf("%s", matrix[i]);
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (matrix[i][j] == '*')
{
printf("%c", matrix[i][j]);
}
// 1행 1열에 있을 경우에
else if (i == 0 && j == 0)
{
cnt = 0;
if (matrix[i][j + 1] == '*')
cnt++;
if (matrix[i + 1][j + 1] == '*')
cnt++;
if (matrix[i + 1][j] == '*')
cnt++;
printf("%d", cnt);
}
// 1행 5열에 있을 경우에
else if (i == 0 && j == 4)
{
cnt = 0;
if (matrix[i][j - 1] == '*')
cnt++;
if (matrix[i + 1][j] == '*')
cnt++;
if (matrix[i + 1][j - 1] == '*')
cnt++;
printf("%d", cnt);
}
//5행 1열에 있을 경우에
else if (i == 4 && j == 0)
{
cnt = 0;
if (matrix[i][j + 1] == '*')
cnt++;
if (matrix[i - 1][j] == '*')
cnt++;
if (matrix[i - 1][j + 1] == '*')
cnt++;
printf("%d", cnt);
}
// 5행 5열에 있을 경우에
else if (i == 4 && j == 4)
{
cnt = 0;
if (matrix[i][j - 1] == '*')
cnt++;
if (matrix[i - 1][j - 1] == '*')
cnt++;
if (matrix[i - 1][j] == '*')
cnt++;
printf("%d", cnt);
}
// 1행에 있을 때
else if (i == 0 && j != 0)
{
cnt = 0;
if (matrix[i][j - 1] == '*')
cnt++;
if (matrix[i][j + 1] == '*')
cnt++;
if (matrix[i + 1][j - 1] == '*')
cnt++;
if (matrix[i + 1][j] == '*')
cnt++;
if (matrix[i + 1][j + 1] == '*')
cnt++;
printf("%d", cnt);
}
// 5행에 있을 때
else if (i == 4 && j != 0)
{
cnt = 0;
if (matrix[i][j - 1] == '*')
cnt++;
if (matrix[i][j + 1] == '*')
cnt++;
if (matrix[i - 1][j - 1] == '*')
cnt++;
if (matrix[i - 1][j] == '*')
cnt++;
if (matrix[i - 1][j - 1] == '*')
cnt++;
printf("%d", cnt);
}
// 1열에 있을 때,
else if (i != 0 && j == 0)
{
cnt = 0;
if (matrix[i][j + 1] == '*')
cnt++;
if (matrix[i - 1][j + 1] == '*')
cnt++;
if (matrix[i - 1][j] == '*')
cnt++;
if (matrix[i + 1][j] == '*')
cnt++;
if (matrix[i + 1][j + 1] == '*')
cnt++;
printf("%d", cnt);
}
// 5열에 있을 때,
else if (i != 0 && j == 4)
{
cnt = 0;
if (matrix[i - 1][j] == '*')
cnt++;
if (matrix[i + 1][j] == '*')
cnt++;
if (matrix[i - 1][j - 1] == '*')
cnt++;
if (matrix[i][j - 1] == '*')
cnt++;
if (matrix[i + 1][j - 1] == '*')
cnt++;
printf("%d", cnt);
}
//그 외
else
{
cnt = 0;
if (matrix[i][j - 1] == '*')
cnt++;
if (matrix[i][j + 1] == '*')
cnt++;
if (matrix[i - 1][j] == '*')
cnt++;
if (matrix[i - 1][j - 1] == '*')
cnt++;
if (matrix[i - 1][j + 1] == '*')
cnt++;
if (matrix[i + 1][j] == '*')
cnt++;
if (matrix[i + 1][j - 1] == '*')
cnt++;
if (matrix[i + 1][j + 1] == '*')
cnt++;
printf("%d", cnt);
}
}
printf("\n");
}
for (int i = 0; i < row; i++)
{
free(matrix[i]);
}
free(matrix);
}
너무 섣불리 코딩을 하여 실수를 많이했습니다.
코딩을 하여 Visual Studio 2017에서 확인 결과 정상으로 동작하였습니다. 하지만 심사에 붙여넣기를 하니깐 오류가 발생해 테스팅이 취소되었다고 합니다. 어디가 심사기준에 부적합한가요...?
문제의 첫 문장을 보면 다음과 같습니다.
표준 입력으로 행렬의 크기 m, n과 문자(char) 행렬이 입력됩니다(m과 n의 범위는 3~10).
코드는 5x5 고정 크기로 해법을 풀이하지만, 문제가 요구하는 것은 mxn으로 된 동적 크기의 판에서 지뢰를 찾아야 합니다.
3x3나 10x10으로 입력되는 판에서 지뢰찾기가 가능해야 합니다.