Lavida 2079 Mine Sweeper
문제 설명
‘지뢰찾기’ 게임을 개발하려고 한다. 이를 위해서 먼저 지뢰가 없는 셀에 인접한 셀들 중 지뢰가 몇 개 놓여있는지를 카운트하여 그 값을 출력하는 프로그램을 먼저 작성해 보자.
지뢰밭이 주어질 경우에 지뢰가 없는 셀은 주변 셀(가로, 세로, 대각선으로 인접한 셀)들 중에 몇 개의 지뢰가 있는지를 확인하여 그 숫자를 출력하고, 지뢰가 있는 셀은 그대로 지뢰 모양이 출력되도록 하는 프로그램을 작성하라.
입력 설명
맨 처음 테스트 케이스의 개수 T(1 <= T <= 10)를 입력 받는다.
그 뒤에 M x N 크기(M: 높이, N: 폭)의 지뢰밭을 의미하는 M, N(3<= M, N <=30) 을 입력 받는다.
그 다음에 M x N 크기의 지뢰밭이 입력된다.
지뢰가 없는 셀은 ‘.’으로 표시되며 지뢰가 있는 셀은 ‘*’ 로 표시된다.
출력 설명
각 테스트 케이스마다 주변 셀에 존재하는 지뢰의 개수를 M x N 크기로 출력한다. 지뢰가 있는 자리는 원래대로 ‘*’을 출력한다.
입력 예시
2
3 4
....
.*..
....
5 5
*....
....*
.*.*.
.*...
.....
출력 예시
1110
1*10
1110
*1011
2222*
2*3*2
2*311
11100
코드1
#include <stdio.h>
int a, b;
bool check(int x, int y) {
if (x >= 0 && x < a) {
if (y >= 0 && y < b) { return true; }
else { return false; }
}
else { return false; }
}
int main(void){
int x, y;
int testcase, j, count = 0;
char input[30][30];
scanf("%d", &testcase);
for (int i = 0; i < testcase; i++)
{
int output[30][30] = { 0, };
scanf("%d %d", &a, &b);
for (int i = 0; i < a; i++)
{
scanf("%s", input[i]);
for (j = 0; j < b; j++)
{
if (input[i][j] == '*')
{
output[i][j] = 9;
}
else if (input[i][j] == '.')
{
output[i][j] = 0;
}
}
}
for (int i = 0; i < a; i++)
{
for (j = 0; j < b; j++)
{
if (output[i][j] == 9)
{
continue;
}
for (x = -1; x <= 1; x++)
{
for (y = -1; y <= 1; y++)
{
if (output[i + x][j + y] == 9)
{
if (check(i + x, j + y)) {
count++;
}
}
}
}
output[i][j] = count;
count = 0;
}
}
for (int i = 0; i < a; i++)
{
for (j = 0; j < b; j++)
{
if (output[i][j] == 9)
{
printf("*");
}
else
{
printf("%d", output[i][j]);
}
}
printf("\n");
}
}
return 0;
}
나 : say
당신들은 꿈을 믿어요?
댓글남기기