문제가 생각보다 어렵네요 ㅜㅜ;;
제가 visual studio로 돌렸을 때 잘 동작하는데 문제 오답으로 나와서
왜 그럴까요??
그리고 너무 노가다식으로 짰는데 다른 방법은 없을까요?
#if 0
#define CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int num = 0;
scanf("%d", &num);
for (int i = 0; i < num; i++)
{
for (int j = 0; j < num+i; j++)
{
if (j < (num-1) - i)
printf(" ");
else
printf("*");
}
printf("\n");
}
}
#endif
#define CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int m, n;
scanf("%d %d", &m, &n);
char **matrix = malloc(sizeof(char *) * m);
for(int i = 0; i < m; i++)
{
matrix[i] = malloc(sizeof(char) * n+1);
}
//값 할당
for(int i = 0; i < m; i++)
{
scanf("%s", matrix[i]);
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (matrix[i][j] == '*')
matrix[i][j] = '*';
else
{
matrix[i][j] = 0x30;
}
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (matrix[i][j] == '*')
{
if ((i == 0) && (j == 0))
{
if (matrix[0][1] == '*')
;
else
matrix[0][1]++;
if (matrix[1][0] == '*')
;
else
matrix[1][0]++;
if (matrix[1][1] == '*')
;
else
matrix[1][1]++;
}
else if ((i == 0) && (j != 0))
{
if (matrix[0][j - 1] == '*')
;
else
matrix[0][j - 1]++;
if (matrix[0][j + 1] == '*')
;
else
matrix[0][j + 1]++;
if (matrix[1][j - 1] == '*')
;
else
matrix[1][j - 1]++;
if (matrix[1][j] == '*')
;
else
matrix[1][j]++;
if (matrix[1][j + 1] == '*')
;
else
matrix[1][j + 1]++;
}
else if ((i != 0) && (j == 0))
{
if (matrix[i - 1][0] == '*')
;
else
matrix[i-1][0]++;
if (matrix[i - 1][1] == '*')
;
else
matrix[i-1][1]++;
if (matrix[i][1] == '*')
;
else
matrix[i][1]++;
if (matrix[i + 1][0] == '*')
;
else
matrix[i + 1][0]++;
if (matrix[i + 1][1] == '*')
;
else
matrix[i+1][1]++;
}
else
{
if (matrix[i - 1][j - 1] == '*')
;
else
matrix[i - 1][j - 1]++;
if (matrix[i - 1][j] == '*')
;
else
matrix[i - 1][j]++;
if (matrix[i - 1][j + 1] == '*')
;
else
matrix[i - 1][j + 1]++;
if (matrix[i][j - 1] == '*')
;
else
matrix[i][j - 1]++;
if (matrix[i][j + 1] == '*')
;
else
matrix[i][j + 1]++;
if (matrix[i + 1][j - 1] == '*')
;
else
matrix[i+1][j-1]++;
if (matrix[i + 1][j] == '*')
;
else
matrix[i + 1][j]++;
if (matrix[i + 1][j + 1] == '*')
;
else
matrix[i + 1][j + 1]++;
}
}
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
printf("%c ", matrix[i][j]);
}
printf("\n");
}
for(int i = 0; i < m; i++)
{
free(matrix[i]);
}
free(matrix);
return 0;
}
signal: segmentation fault (core dumped)이와 같은 에러가 발생합니다. 이는 메모리 접근이 잘못되었을 때 주로 발생합니다. 배열의 범위를 벗어난 메모리에 접근할 때 주로 발생합니다.
해당 문제는 문의가 매우 많았습니다. 포럼 상단에서 38.8로 검색하면 이전 답변을 찾아볼 수 있습니다. 문제 해결에 도움이 될 겁니다.
원래 문제 해결은 무식한 방법(brute force)으로 풀고, 점점 우아하게 바꾸는 겁니다.