반응형
입력 : 지뢰는 문자 *로 하고 일반 셀은 #로 입력
출력 : 지뢰가 설치되어 있지 않은 셀 위치에 주변 지뢰의 개수 출력
EX)
입력 :
#####
#*###
##*##
#*###
###*#
출력:
11100
1*210
23*10
1*321
112*1
입력과 출력할 때 모두 2차원 배열 사용
#include<stdio.h>
#define X_VALUE 5 //2차원 배열의 행의 수
#define Y_VALUE 5 //2차원 배열의 열의 수
void readBombInfo(char grid[][Y_VALUE + 1]) {
int i;
// grid 및 지뢰 정보 입력
for (i = 0; i < X_VALUE; i++)
scanf("%s", grid[i]);
}
void countBomb(char grid[][Y_VALUE + 1], int numOfBombs[][Y_VALUE]) {
int i, j;
for (i = 0; i < X_VALUE; i++)
for (j = 0; j < Y_VALUE; j++)
if (grid[i][j] == '*') {
//위의 세 셀
if (i - 1 >= 0) {
numOfBombs[i - 1][j]++;
if (j - 1 >= 0)
numOfBombs[i - 1][j - 1]++;
if (j + 1 < Y_VALUE)
numOfBombs[i - 1][j + 1]++;
}
//아래 세 쎌
if (i + 1 < X_VALUE) {
numOfBombs[i + 1][j]++;
if (j - 1 >= 0)
numOfBombs[i + 1][j - 1]++;
if (j + 1 < Y_VALUE)
numOfBombs[i + 1][j + 1]++;
}
//왼쪽
if (j - 1 >= 0)
numOfBombs[i][j - 1]++;
//오른쪽
if (j + 1 < Y_VALUE)
numOfBombs[i][j + 1]++;
}
}
void display_numOfBombs(char grid[][Y_VALUE + 1], int numOfBombs[][Y_VALUE]) {
int i, j;
printf("\n지뢰의 개수\n");
for (i = 0; i < X_VALUE; i++) {
for (j = 0; j < Y_VALUE; j++)
if (grid[i][j] == '*')
printf("*");
else
printf("%d", numOfBombs[i][j]);
printf("\n");
}
}
int main(void) {
char grid[X_VALUE][Y_VALUE + 1]; //문자열의 경우 마지막에 NULL이 들어가야 하므로 // 5X5 배열이 아닌 5X6 배열이 되어야 한다.
int numOfBombs[X_VALUE][Y_VALUE] = { 0 }; //지뢰의 개수를 넣는 정수형 5X5 배열
readBombInfo(grid);
countBomb(grid, numOfBombs);
display_numOfBombs(grid, numOfBombs);
}
반응형
'⚙️ 알고리즘 > 기타 문제 & 풀이' 카테고리의 다른 글
[C] 문자열 병합 (0) | 2020.07.18 |
---|---|
[C] 부분집합 여부 판단 (0) | 2020.07.17 |
[C] 사방의 값 채우기(지뢰찾기 변형) (0) | 2020.07.17 |
[C] 3X3 게임판의 Tic-Tac-Toe (0) | 2020.07.17 |
[C] 합집합, 교집합, 차집합 (0) | 2020.07.13 |