#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
int m, n;
scanf_s("%d %d", &m, &n);
char** matrix = malloc(sizeof(char*) * m); //2차원 배열 선언
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] = 0; //지뢰가 아닌 점부분 0으로 치환
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if(matrix[i][j] == '*') { // 지뢰이면 지뢰주변 모두 더하기
if (i - 1 < 0 || j - 1 < 0) {} 1 씩 해줌
else {
matrix[i - 1][j - 1] += 1; //이 부분에서 지뢰가 충돌하면
matrix[i - 1][j] += 1; 어떻게 해결해야 될까요?
matrix[i][j - 1] += 1;
if (i + 1 > m || j + 1 > n) {}
else {
matrix[i - 1][j + 1] += 1;
matrix[i + 1][j - 1] += 1;
matrix[i + 1][j] += 1;
matrix[i + 1][j + 1] += 1;
matrix[i][j + 1] += 1;
}
}
}
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == '*') printf("%c ", matrix[i][j]); // 지뢰는 지뢰로 출력
else printf("%d ", matrix[i][j]); 아니면 숫자 출력
}printf("\n");
}
for (int i = 0; i < m; i++) {
free(matrix[i]); //동적할당 메모리 프리 선언
}
free(matrix);
return 0;
}
이런식으로 코딩했는데 첨부한 사진처럼 결과가 나옵니다.
제 생각엔 별(*)끼리 충돌했을때 계산이 안되는거 같은데 어떤부분을 고치면 좋을까요?
한줄 한줄 if else문을 넣어서 별이면 안더해주고 별이면 더해주고 넣기에는 너무 비효율적인거 같아서 질문 드립니다!
3 3
...
...
..*