문제에서 주어진 테스트 케이스는 지뢰를 안 밟은 케이스 입니다.
질문하기에서 올려준 지뢰를 밟은 테스트 케이스 공유(abcd8637님 감사합니다)
링크 https://www.acmicpc.net/board/view/68709
8
...**..*
......*.
....*...
........
........
.....*..
...**.*.
.....*..
xxxx....
....xxxx
xxxx....
....xxxx
xxxx....
....xxxx
xxxx....
....xxxx
001**..*
....33*2
0001*...
....1100
0000....
....3*21
001**.*.
....3*21
var fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
// input을 받아오는걸 잘 못합니다
const n = +input.shift(); // 8
// 끝난뒤 판
const doneBoard = input.filter((v, i) => i >= n).map((v) => v.split(""));
// 지뢰 위치 판
input = input.filter((v, i) => i < n).map((v) => v.split(""));
// 주위 8 곳을 확인하고 지뢰의 개수를 반환하는 함수
function check(i, j, board) {
let dx = [-1, 0, 1, -1, 1, -1, 0, 1];
let dy = [-1, -1, -1, 0, 0, 1, 1, 1];
// 지뢰 개수
let cnt = 0;
for (let k = 0; k < 9; k++) {
let x = i + dx[k];
let y = j + dy[k];
// 지뢰판을 벗어난 경우를 제외한뒤 지뢰일 경우 cnt++
if (x >= 0 && y >= 0 && x < n && y < n && board[x][y] === "*") cnt++;
}
return cnt;
}
function solution(n, board, doneBoard) {
// 지뢰를 밟았을때와 아닐때 출력이 다르므로 변수를 만들었습니다.
let isTrap = false;
// 지뢰를 밟은 판인지 확인하는 과정
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if (doneBoard[i][j] === "x" && board[i][j] === "*") {
isTrap = true;
// 밟으면 종료
break;
}
}
}
if (isTrap) {
// 지뢰 밟았을때 출력 과정
for (let i = 0; i < n; i++) {
let answer = "";
for (let j = 0; j < n; j++) {
if (board[i][j] === "*") answer += board[i][j];
else {
if (doneBoard[i][j] === "x") answer += check(i, j, board);
else {
answer += ".";
}
}
}
console.log(answer);
}
} else {
// 지뢰 안밟았을때 출력 과정
for (let i = 0; i < n; i++) {
let answer = "";
for (let j = 0; j < n; j++) {
if (doneBoard[i][j] === "x") answer += check(i, j, board);
else answer += ".";
}
console.log(answer);
}
}
}
solution(n, input, doneBoard);