#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int row,col;
scanf("%d %d", &row, &col);
int** m = malloc(sizeof(int*) * row);
char** n = malloc(sizeof(char*) * row);
for (int i = 0; i < row; i++) {
m[i] = malloc(sizeof(int) * col);
n[i] = malloc(sizeof(char) * (col+1));
memset(m[i], 0, sizeof(int) * col);
}
for(int i=0;i<row;i++){
scanf("%s", n[i]);
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (n[i][j] == '*') {
if (i == 0 && j == 0) {
m[i + 1][j]++;
m[i][j + 1]++;
m[i + 1][j + 1]++;
}
else if (i == (row-1) && j == 0) {
m[i - 1][j]++;
m[i][j + 1]++;
m[i - 1][j + 1]++;
}
else if (i == 0 && j == (col-1)) {
m[i + 1][j]++;
m[i][j - 1]++;
m[i + 1][j - 1]++;
}
else if (i == (row-1) && j == (col-1)) {
m[i - 1][j]++;
m[i][j - 1]++;
m[i - 1][j - 1]++;
}
else if (i == 0) {
m[i][j - 1]++;
m[i][j + 1]++;
m[i + 1][j]++;
m[i + 1][j - 1]++;
m[i + 1][j + 1]++;
}
else if (j == 0) {
m[i + 1][j]++;
m[i - 1][j]++;
m[i][j + 1]++;
m[i + 1][j + 1]++;
m[i - 1][j + 1]++;
}
else if (i == (row-1)) {
m[i + 1][j]++;
m[i][j - 1]++;
m[i][j + 1]++;
m[i + 1][j - 1]++;
m[i + 1][j + 1]++;
}
else if (j == (col-1)) {
m[(i + 1)][j]++;
m[(i - 1)][j]++;
m[i][(j - 1)]++;
m[i + 1][j - 1]++;
m[i - 1][j - 1]++;
}
else {
m[i + 1][j]++;
m[i + 1][j + 1]++;
m[i + 1][j - 1]++;
m[i - 1][j]++;
m[i - 1][j - 1]++;
m[i - 1][j + 1]++;
m[i][j - 1]++;
m[i][j + 1]++;
}
}
}
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (n[i][j] == '*')
printf("%c", n[i][j]);
else
printf("%d", m[i][j]);
}
printf("\n");
}
for (int i = 0; i < row; i++) {
free(m[i]);
free(n[i]);
}
free(m);
free(n);
return 0 ;
}
컴파일을 해서 입력값을 넣었을때 결과가 올바르게 나왔는데 심사를 실행되지않는 코드라 나오는데 무언가 문제가 있는건가요?
온라인 심사는 다양한 데이터를 통해 문제를 제대로 풀었는지 심사합니다.
심사문제를 통과하지 못했다는 것은 제출한 코드가 잘못 동작하고 있다는 뜻입니다. 입력되는 데이터에 따라 올바르게 동작하는 경우와 그렇지 않은 경우가 있습니다.
예를 들어 문의한 코드는 다음 입력에 대해서는 메모리 오류가 발생하며 실행이 중단됩니다.
3 3
...
...
.**
내부 심사 데이터에는
**. 같은 입력이 1번, 2번, 3번 줄인 경우
.** 같은 입력이 1번, 2번, 3번 줄인 경우
또는
...
.*.
...
처럼 가운데에만 지뢰가 있는 경우,
각 위치 테두리 위치에 지뢰가 하나씩 있는 경우
지뢰의 크기가 홀수일 때, 짝수일 때 등을 고려하여 심사합니다.
심사 문제를 통과하지 못했다면 반드시 잘못 동작하는 데이터가 있다는 뜻으로 이해하면 됩니다.
잘 동작하는 것처럼 보이지만, 특정 조건일 때 오동작하는 버그 프로그램이 있습니다.
엑스레이를 촬영하는 의료 기기에 들어간 소프트웨어는 특정 조건의 경우 과도한 방사능을 유출해서 환자 피폭이 문제가 되었고,
특정 조건에서 오동작해서 인공위성이 추락한 경우도 있습니다.
플레이스테이션3은 4년에 한 번 돌아오는 윤년 계산이 틀려서 2010년 3월 1일에 플레이스테이션3을 실행한 게이머는 게임기가 제대로 동작하지 않았습니다.
대한항공 801편 추락, 최근에는 보잉737 맥스 추락도 소프트웨어 문제가 있었습니다.
그래서 현업에서는 소프트웨어 테스팅을 중요시하고, 단위 테스트(Unit Test)를 사용하며 버그를 줄이기 위해 노력하고 있습니다.
심사문제 또한 일종의 단위 테스트이고, 버그가 있는 소프트웨어를 검출하는 소프트웨어 테스팅 단계라고 이해하면 됩니다.