PS/BOJ

백준 1996 지뢰찾기 / JAVA

얍연구소장 2023. 5. 9. 19:55

https://www.acmicpc.net/problem/1996

 

1996번: 지뢰 찾기

첫째 줄에 N(1 ≤ N ≤ 1,000)이 주어진다. 다음 N개의 줄에는 지뢰 찾기 map에 대한 정보가 주어지는데 '.' 또는 숫자로 이루어진 문자열이 들어온다. '.'는 지뢰가 없는 것이고 숫자는 지뢰가 있는 경

www.acmicpc.net

 

>풀이

/*
 * 백준 1996 지뢰찾기 
 * #실버5
 * 23.05.08
 */
public class boj_1996 {

	static int[] dy = {-1,0,1,1,1,0,-1,-1}; //[][여기]
	static int[] dx = {-1,-1,-1,0,1,1,1,0}; //[여기][]
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		
		char[][] cArr = new char[N][N];
		
		// 지뢰 map 입력
		for(int i = 0; i < cArr.length; i++) {
			cArr[i] = br.readLine().toCharArray();
		}
		
		int[][] answer = new int[N][N];
		
		for(int i = 0; i < cArr.length; i++) {
			for(int j = 0; j < cArr.length; j++) {
				if('.' != cArr[i][j]) {
					answer[i][j] = Integer.MIN_VALUE;
					solution(i,j,cArr[i][j] - '0',cArr,answer);
				}
			}
		}
		draw(answer);
	}

	public static void solution(int x, int y, int bomb, char[][] cArr, int[][] answer ) {
		int maxLen = answer.length; 
		for(int n = 0; n < 8; n++) {
			int nx = x + dx[n];
			int ny = y + dy[n];
			
			if(nx >= 0 && nx < maxLen && ny >= 0 && ny < maxLen) {
				answer[nx][ny] += bomb;
			}
		}
	}
	
	public static void draw(int[][] answer) {
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i < answer.length; i++) {
			for(int j = 0; j < answer.length; j++) {
				if(answer[i][j] < 0) {
					sb.append('*');
				} else if(answer[i][j] > 9) {
					sb.append('M');
				} else {
					sb.append(answer[i][j]);
				}
			}
			sb.append('\n');
		}
		System.out.println(sb);
	}
}