소감 ¶
매우 평이한 문제이다.
방법은 여러가지가 있겠지만 아주 간단하게 2차원배열을 잡고 8가지 방향을 모두 조사해보는 방법을 사용하였다.
최대 입력의 크기가 100 x 100이므로 모두 조사해보는 방법도 매우 빠른시간안에 해결할 수 있다.
매우 하드코딩이라서 코드 라인수가 매우 길다 -.-;;
방법은 여러가지가 있겠지만 아주 간단하게 2차원배열을 잡고 8가지 방향을 모두 조사해보는 방법을 사용하였다.
최대 입력의 크기가 100 x 100이므로 모두 조사해보는 방법도 매우 빠른시간안에 해결할 수 있다.
매우 하드코딩이라서 코드 라인수가 매우 길다 -.-;;
어려웠던 점 ¶
이번에는 처음으로 Presentation Error를 여러번 받았다. 이것은 프로그램이 도출하는 답은 맞으나 출력형식이 잘못된 경우 발생한다.
이 문제는 출력세트별로 반드시 빈 줄을 추가하라고 했다. 이것이 매우 애매한 해석으로 이루어져서 코딩에 어려움을 겪었다.
결과적으로 이야기하면 하나의 출력세트가 있을 경우엔 밑에 빈 줄이 없어야하고 하나 이상일 때만 빈 줄이 있어야한다.
밑에 코드에서 if문으로 outputNumber > 1 인 부분이 Presentation Error를 벗어나게 하는 해결방법이었다.
이 문제는 출력세트별로 반드시 빈 줄을 추가하라고 했다. 이것이 매우 애매한 해석으로 이루어져서 코딩에 어려움을 겪었다.
결과적으로 이야기하면 하나의 출력세트가 있을 경우엔 밑에 빈 줄이 없어야하고 하나 이상일 때만 빈 줄이 있어야한다.
밑에 코드에서 if문으로 outputNumber > 1 인 부분이 Presentation Error를 벗어나게 하는 해결방법이었다.
코드 ¶
~cpp
// Minesweeper
// UVa ID : 10189
// 2차원 배열에 데이터 입력은 (1,1) 부터 시작한다.
#include <iostream>
//#include <fstream>
using namespace std;
#define ArSize 102
void process(char data[][ArSize], int row, int col);
void init_array(char data[][ArSize], int row, int col);
void output(char data[][ArSize], int row, int col);
//ifstream fin("input.txt");
int main()
{
char data[ArSize][ArSize];
int inputRow, inputCol;
int outputNumber = 1;
int i, j;
while (cin >> inputRow >> inputCol)
{
// 종료조건
if ((inputRow == 0) && (inputCol == 0))
break;
// 배열 초기화 (경계값까지 '.'으로 초기화)
init_array(data, inputRow + 1, inputCol + 1);
// 입력 (1,1)이 맨 처음이다.
for (i = 1; i <= inputRow; i++)
{
for (j = 1; j <= inputCol; j++)
{
cin >> data[i][j];
}
}
// 지뢰 찾기 작업
process(data, inputRow, inputCol);
// 출력 (출력이 하나인 경우는 밑에 빈칸을 두지 않는다!!)
if (outputNumber > 1)
cout << endl;
cout << "Field #" << outputNumber++ << ":" << endl;
output(data, inputRow, inputCol);
}
return 0;
}
void process(char data[][ArSize], int row, int col)
{
int i, j;
char count = '0';
for (i = 1; i <= row; i++)
{
for (j = 1; j <= col; j++)
{
// 지뢰는 pass
if (data[i][j] == '*')
continue;
else
{
// 북서
if (data[i - 1][j - 1] == '*')
count++;
// 북
if (data[i - 1][j] == '*')
count++;
// 북동
if (data[i - 1][j + 1] == '*')
count++;
// 동
if (data[i][j + 1] == '*')
count++;
// 동남
if (data[i + 1][j + 1] == '*')
count++;
// 남
if (data[i + 1][j] == '*')
count++;
// 남서
if (data[i + 1][j - 1] == '*')
count++;
// 서
if (data[i][j - 1] == '*')
count++;
data[i][j] = count;
count = '0';
}
}
}
}
// 배열 초기화
void init_array(char data[][ArSize], int row, int col)
{
int i, j;
for (i = 0; i <= row; i++)
{
for (j = 0; j <= col; j++)
{
data[i][j] = '.';
}
}
}
// 출력 - 배열 내용 출력
void output(char data[][ArSize], int row, int col)
{
int i, j;
for (i = 1; i <= row; i++)
{
for (j = 1; j <= col; j++)
{
cout << data[i][j];
}
cout << endl;
}
}










