~cpp
#include <iostream>
#include <vector>
using namespace std;
const int MINE = -1;
const int MOVE[3] = {-1, 0, 1};
void initializeBoard(int maxRow, int maxCol, vector< vector<int> >& board)
{
board.resize(maxRow);
for(int i = 0; i < maxRow; i++)
board[i].resize(maxCol);
}
bool isInBoard(int row, int col, int moveRow, int moveCol, const vector< vector<int> >& board)
{
return (row + MOVE[moveRow] < 0 || row + MOVE[moveRow] >= board.size()) ||
(col + MOVE[moveCol] < 0 || col + MOVE[moveCol] >= board[0].size());
}
void checkMine(int row, int col, vector< vector<int> >& board)
{
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
if((MOVE[i] == 0 && MOVE[j] == 0) ||
isInBoard(row, col, i, j, board) ||
(board[row + MOVE[i]][col + MOVE[j]] == MINE))
continue;
board[row + MOVE[i]][col + MOVE[j]] += 1;
}
}
}
void setMinesOnBoard(vector< vector<int> >& board)
{
for(int i = 0; i < board.size(); i++)
{
cin.get(); // 이 한 줄이 삽질의 원흉!!
for(int j = 0; j < board[0].size(); j++)
{
char c = cin.get();
if(c == '*')
{
board[i][j] = MINE;
checkMine(i, j, board);
}
}
}
}
void showBoard(const vector< vector<int> >& board)
{
for(int i = 0; i < board.size(); i++)
{
for(int j = 0; j < board[0].size(); j++)
{
if(board[i][j] == MINE)
cout << "*" << " ";
else
cout << board[i][j] << " ";
}
cout << endl;
}
}
int main()
{
int maxRow, maxCol;
cin >> maxRow >> maxCol;
vector< vector<int> > board;
initializeBoard(maxRow, maxCol, board);
setMinesOnBoard(board);
showBoard(board);
return 0;
}
cin.get()으로 개행문자(\n)를 먹어야 하는 걸 깜박해서 계속 입력과 다른 출력이 나와 상당히 삽질... --재동