Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MineSweeper/신재동: Difference between revisions

From ZeroWiki
imported>Unknown
No edit summary
 
(Repair batch-0002 pages from live compare)
 
Line 5: Line 5:
   
   
  const int MINE = -1;
  const int MINE = -1;
  const int MOVE[3] = {-1, 0, 1};
  const int MOVE[3] = {-1, 0, 1};
   
   
  void initializeBoard(int maxRow, int maxCol, vector< vector<int> >& board)
  void initializeBoard(int maxRow, int maxCol, vector< vector<int> >& board)
Line 11: Line 11:
  board.resize(maxRow);
  board.resize(maxRow);
  for(int i = 0; i < maxRow; i++)
  for(int i = 0; i < maxRow; i++)
  board[i].resize(maxCol);
  board[i].resize(maxCol);
  }
  }
   
   
  bool isInBoard(int row, int col, int moveRow, int moveCol, const vector< vector<int> >& board)
  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()) ||
  return (row + MOVE[moveRow] < 0 || row + MOVE[moveRow] >= board.size()) ||
  (col + MOVE[moveCol] < 0 || col + MOVE[moveCol] >= board[0].size());
  (col + MOVE[moveCol] < 0 || col + MOVE[moveCol] >= board[0].size());
  }
  }
   
   
Line 26: Line 26:
  for(int j = 0; j < 3; j++)
  for(int j = 0; j < 3; j++)
  {
  {
  if((MOVE[i] == 0 && MOVE[j] == 0) ||
  if((MOVE[i] == 0 && MOVE[j] == 0) ||
  isInBoard(row, col, i, j, board) ||
  isInBoard(row, col, i, j, board) ||
  (board[row + MOVE[i]][col + MOVE[j]] == MINE))
  (board[row + MOVE[i]][col + MOVE[j]] == MINE))
  continue;
  continue;
 
 
  board[row + MOVE[i]][col + MOVE[j]] += 1;
  board[row + MOVE[i]][col + MOVE[j]] += 1;
  }
  }
  }
  }
Line 41: Line 41:
  {
  {
  cin.get(); // 이 한 줄이 삽질의 원흉!!
  cin.get(); // 이 한 줄이 삽질의 원흉!!
  for(int j = 0; j < board[0].size(); j++)
  for(int j = 0; j < board[0].size(); j++)
  {
  {
  char c = cin.get();
  char c = cin.get();
  if(c == '*')
  if(c == '*')
  {
  {
  board[i][j] = MINE;
  board[i][j] = MINE;
  checkMine(i, j, board);
  checkMine(i, j, board);
  }
  }
Line 57: Line 57:
  for(int i = 0; i < board.size(); i++)
  for(int i = 0; i < board.size(); i++)
  {
  {
  for(int j = 0; j < board[0].size(); j++)
  for(int j = 0; j < board[0].size(); j++)
  {
  {
  if(board[i][j] == MINE)
  if(board[i][j] == MINE)
  cout << "*" << " ";
  cout << "*" << " ";
  else
  else
  cout << board[i][j] << " ";
  cout << board[i][j] << " ";
  }
  }
  cout << endl;
  cout << endl;
Line 83: Line 83:
----
----
cin.get()으로 개행문자(\n)를 먹어야 하는 걸 깜박해서 계속 입력과 다른 출력이 나와 상당히 삽질... --재동
cin.get()으로 개행문자(\n)를 먹어야 하는 걸 깜박해서 계속 입력과 다른 출력이 나와 상당히 삽질... --재동

Latest revision as of 00:16, 27 March 2026

MineSweeper/신재동

#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)를 먹어야 하는 걸 깜박해서 계속 입력과 다른 출력이 나와 상당히 삽질... --재동