C언어 코딩도장 38.4
, 주 정현님이 작성#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int m = 0, n = 0, i = 0, j = 0, num = 0;
scanf("%d %d", &m, &n);
char **array = malloc(sizeof(char *)* m);
for (i = 0; i < m; i++)
{
array[i] = malloc(sizeof(char)* (n + 1));
memset(array[i], 0, sizeof(char)* (n + 1));
}
for (i = 0; i < m; i++)
{
scanf("%s", array[i]);
}
for (j = 0; j < n; j++)
{
for (i = 0; i < m; i++)
{
if (array[i][j] != '*')
{
array[i][j] = 48;
}
}
}
//////////////////////////////
if (array[0][0] != '*')
{
if (array[0][1] == '*')
array[0][0] += 1;
if (array[1][0] == '*')
array[0][0] += 1;
if (array[1][1] == '*')
array[0][0] += 1;
}
///////////////////////////////
if (array[m - 1][0] != '*')
{
if (array[m - 1][1] == '*')
array[m - 1][0] += 1;
if (array[m - 2][0] == '*')
array[m - 1][0] += 1;
if (array[m - 2][1] == '*')
array[m - 1][0] += 1;
}
///////////////////////////////
if (array[0][n - 1] != '*')
{
if (array[1][n - 2] == '*')
array[0][n - 1] += 1;
if (array[0][n - 2] == '*')
array[0][n - 1] += 1;
if (array[1][n - 1] == '*')
array[0][n - 1] += 1;
}
///////////////////////////////
if (array[0][n - 1] != '*')
{
if (array[m - 1][n - 2] == '*')
array[m - 1][n - 1] += 1;
if (array[m - 2][n - 2] == '*')
array[m - 1][n - 1] += 1;
if (array[m - 2][n - 1] == '*')
array[m - 1][n - 1] += 1;
}
///////////////////////////////
for (i = 1; i < m - 1; i++)
{
if (array[i][0] != '*')
{
if (array[i - 1][0] == '*')
array[i][0] += 1;
if (array[i + 1][0] == '*')
array[i][0] += 1;
if (array[i - 1][1] == '*')
array[i][0] += 1;
if (array[i][1] == '*')
array[i][0] += 1;
if (array[i + 1][1] == '*')
array[i][0] += 1;
}
if (array[i][n - 1] != '*')
{
if (array[i - 1][n - 1] == '*')
array[i][n - 1] += 1;
if (array[i + 1][n - 1] == '*')
array[i][n - 1] += 1;
if (array[i - 1][n - 2] == '*')
array[i][n - 1] += 1;
if (array[i][n - 2] == '*')
array[i][n - 1] += 1;
if (array[i + 1][n - 2] == '*')
array[i][n - 1] += 1;
}
}
/////////////////////////////////////////////////////
for (i = 1; i < n - 1; i++)
{
if (array[0][i] != '*')
{
if (array[0][i - 1] == '*')
array[0][i] += 1;
if (array[0][i + 1] == '*')
array[0][i] += 1;
if (array[1][i - 1] == '*')
array[0][i] += 1;
if (array[1][i] == '*')
array[0][i] += 1;
if (array[1][i + 1] == '*')
array[0][i] += 1;
}
if (array[m - 1][i] != '*')
{
if (array[m - 1][i - 1] == '*')
array[m - 1][i] += 1;
if (array[m - 1][i + 1] == '*')
array[m - 1][i] += 1;
if (array[m - 2][i - 1] == '*')
array[m - 1][i] += 1;
if (array[m - 2][i] == '*')
array[m - 1][i] += 1;
if (array[m - 2][i + 1] == '*')
array[m - 1][i] += 1;
}
}
/////////////////////////////////////////////////////
for (i = 1; i < m - 1; i++)
{
for (j = 1; j < n - 1; j++)
{
if (array[i][j] != '*')
{
if (array[i - 1][j - 1] == '*')
array[i][j] += 1;
if (array[i - 1][j] == '*')
array[i][j] += 1;
if (array[i - 1][j + 1] == '*')
array[i][j] += 1;
if (array[i][j - 1] == '*')
array[i][j] += 1;
if (array[i][j + 1] == '*')
array[i][j] += 1;
if (array[i + 1][j - 1] == '*')
array[i][j] += 1;
if (array[i + 1][j] == '*')
array[i][j] += 1;
if (array[i + 1][j + 1] == '*')
array[i][j] += 1;
}
}
}
/////////////////////////////////////////////////////
for (i = 0; i < n; i++)
{
printf("%s\n", array[i]);
}
for (i = 0; i < m; i++)
{
free(array[i]);
}
free(array);
return 0;
}
어제 문의사항을 다시 올립니다.
malloc 부분에 *가 빠져있어서 다시 올렸고, 그 코드는 정상으로 작동했습니다. 하지만 심사문제에서는 여전히 오답으로 처리되었습니다.
Re: C언어 코딩도장 38.4
, 도장_ 관리자님이 작성https://glot.io/snippets/f92iuywvmj
여기 샘플 입력과 샘플 출력이 있습니다.
Run 클릭하고 Input과 Output 비교해보세요.
심각한 버그가 있습니다.
입력이 다음과 같으면
3 3
...
***
***
출력은
232 *** **-이렇게 됩니다.
입력을
3 3
...
..*
***
이렇게 바꾸면
출력은
011 23* **,이렇게 됩니다.
버그가 있으면 심사문제를 통과할 수 없습니다.
문의할 때 38.4가 아니라 38.8로 해주세요. 다른 분들이 검색할 수 있게요.
감사합니다.
Re: C언어 코딩도장 38.4
, 도장_ 관리자님이 작성심사문제는 정답이 없습니다.
정답 코드는 공유하시면 안 됩니다!
포럼에서도 정답 코드는 삭제하고 있습니다.
버그가 있는 코드는 포럼에서도 일부 남겨두고 있습니다.
이는 심사문제 풀이에 대한 접근법에 대해 다른 분들도 힌트를 얻을 수 있다는 점과 그럼에도 버그가 있으므로 해당 코드를 이용해서 심사문제를 해결하려는 분들은 버그도 해결하려면 남의 코드를 분석하는 스킬까지 얻을 수 있기 때문입니다.
이 코드도 재미있는 버그를 갖고 있어서 공유했습니다.
정답은 공유하시면 안 됩니다!
감사합니다.