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);
}
}