ë¬¸ì œ ¶
2006-01-03 05:40:25 Accepted 0.012 Minimum 56031 C++ 10189 - Minesweeper
소ê°� ¶
매우 í�‰ì�´í•œ ë¬¸ì œì�´ë‹¤.
방법ì�€ 여러가지가 ìžˆê² ì§€ë§Œ 아주 간단하게 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;
}
}










