본문 바로가기

백준/구현

지뢰찾기

728x90

www.acmicpc.net/problem/4396

 

4396번: 지뢰 찾기

지뢰찾기는 n × n 격자 위에서 이루어진다. m개의 지뢰가 각각 서로 다른 격자 위에 숨겨져 있다. 플레이어는 격자판의 어느 지점을 건드리기를 계속한다. 지뢰가 있는 지점을 건드리면 플레이어

www.acmicpc.net

#include<iostream>
#include<vector>
#include<map>
#include<cstring>
using namespace std;

int n;

vector<vector<char>>arr(10, vector<char>(10));
vector<vector<char>>openArr(10, vector<char>(10));
vector<vector<char>>answer(10, vector<char>(10,'.'));


int dx[] = {0,0,1,-1,1,-1,1,-1};
int dy[] = {1,-1,0,0,1,1,-1,-1};


bool cango( int x , int y ) {
	return x >= 0 && x < n && y >= 0 && y < n;
}


void findAllStars() {
	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
		
			if (arr[i][j] == '*') {
				answer[i][j] = '*';
			}
		}
	}

}

char findnum(int x, int y) {
	
	int num = 0;
	int nx, ny;
	for (int i = 0; i < 8; i++) {
		
		nx = x + dx[i];
		ny = y + dy[i];

		if (cango(nx, ny)) {
			if (arr[nx][ny] == '*') { num++; }
		}
	}
	
	return '0' + num;
}



int main() {
	
	cin >> n;
	

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			
			cin >> arr[i][j];
		}
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {

			cin >> openArr[i][j];
		}
	}

	bool toggle = false;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
		
		
			if (openArr[i][j] == 'x') {
				
				if (arr[i][j] == '*') { toggle = true; }
				answer[i][j] = findnum(i, j);

			}
			

		}
	}

	if (toggle == true) {
		
		findAllStars();
	
	}


	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {

			cout << answer[i][j];
		}
		cout << endl;
	}

}

'백준 > 구현' 카테고리의 다른 글

정수제곱근  (0) 2021.04.15
수들의 합  (0) 2021.04.15
빙고  (0) 2021.04.15
오리  (0) 2021.04.05
소가 길을 건너간 이유  (0) 2021.04.05