C언어 코딩도장 38.4
, 주 정현님이 작성#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.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;
}
#include <stdio.h>
#include <stdlib.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;
}
이렇게 코드를 작성하여 컴파일러로 실행시켜 본 결과, 예시 뿐만 아니라 다른 것도 정상적으로 작동하였지만 이 코드를 제출하면 오답으로 처리됩니다.
memset 정의 헤더파일이 빠져있어서 string.h를 추가해 보았는데도 오답이라고 나옵니다.
해결 방안이 필요합니다.
Re: C언어 코딩도장 38.4
, 도장_ 관리자님이 작성온라인 컴파일러에 문의한 코드와 테스트 입력을 Input에 넣었습니다.
https://glot.io/snippets/f91k4tzuzj
Run 버튼 클릭하면 에러가 표시됩니다. 컴파일이 안 됩니다.
문의한 코드에서 볼드로 표시한 부분입니다.
char *array = malloc(sizeof(char *) m);
sizeof(char *)은 4이니
이 코드는
malloc(4m)이 됩니다. 4m은 C 언어가 해석할 수 없겠죠?
정상 동작했다면 정상 동작한 코드로 문의하세요.
Re: C언어 코딩도장 38.4
, 도장_ 관리자님이 작성현재 문의한 코드는 2차원 배열을 동적 할당하는 부분과 안 맞는 부분이 매우 많습니다. UNIT 38.3과 38.4의 예제 코드를 살펴보고, 반복 학습하세요.