int m, n,count=0;
scanf("%d %d", &m, &n); //m 가로 n 세로
char **cPtr = malloc(sizeof(char *)*n);
for (int i = 0; i < n; i++)
{
cPtr[i] = malloc(sizeof(char)*m+1);
memset(cPtr[i], 0, sizeof(char)*m + 1);
}
for (int i = 0; i < n; i++)
{
scanf("%s", cPtr[i]);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (cPtr[i][j] == '*')
{
printf("%c ", cPtr[i][j]);
continue;
}
for (int x = i - 1; x <= i + 1; x++)
{
for (int y = j - 1; y <= j + 1; y++)
{
if (x < 0 || y < 0 || x >= n || y >= m)
continue;
if (cPtr[x][y] == '*');
count++;
}
}
printf("%d ", count);
count = 0;
}
printf("\n");
}
for (int i = 0; i < n; i++)
{
free(cPtr[i]);
}
free(cPtr);
return 0;
}
위와 같이 콛코딩을 는데 숫자는 나오는데 예시랑 다른숫자가 나옵니다 정말 고민해도 안풀립니다 혹시 제 코드에문제점이 있나요?
3 3
..*
...
...
입력에 대해 출력을 보면
4 6 * 6 9 6 4 6 4카운트가 과하게 되고 있습니다.
(0,0)의 좌표에는 아무것도 없으니 0이 되어야 하는데, 4가 출력되었다는 것은 중심 좌표 주변 8개 셀을 검사하는 로직이 제대로 작성되지 않았다는 뜻입니다.
포럼 상단 오른쪽에 38.8을 검색하면 이전 질문과 답변을 참조할 수 있고, UNIT 6 디버거 사용법을 살펴보고 디버거를 사용해야 효율적으로 값을 살펴보고 디버깅할 수 있습니다. 또한, UNIT 38.8은 난이도가 높은 허들 역할을 하는 문제라서 중간 고사 정도에 해당합니다. 당장은 어려우면 표시해놓고 나중에 다시 풀어봐도 좋습니다.