(1).백준 4108번 지뢰찾기는 지뢰찾기의 맵을 모두 밝혔을 때 출력되는 결과처럼 나오게 해야 하는 문제로

초기에 지뢰가 있는 형태로 제공될 경우 각각의 인접한 공간에 몇개의 지뢰가 있는지 출력해야 했다.

 

주어진 값을 일단 각각의 테스트케이스로 분리처리하고

지뢰처리하는 메서드를 생성한 다음 내부에서 결과를 담을 배열을 다시 생성해줬다.

 

배열이 생성된 다음 다시 주어진 리스트를 토대로 진행하면서

인접 칸들에 지뢰가 아닌 경우 1씩 증가시킨 다음 최종적으로 result에 모아 출력하는 방식으로 해결했다.

const input = `3 2
..
.*
..
5 5
*.*.*
..*..
*****
.....
..**.
0 0`.split('\n')

const result = []
const getMine = (arr, x, y) => {
    const newArr = []
    for(let i = 0 ; i < x ; i++){
        line = []
        for(let j = 0 ; j < y ; j++){
            if(arr[i][j] == '*'){
                line.push('*')
            }
            else{
                line.push(0)
            }
        }
        newArr.push(line)
    }

    for(let i = 0 ; i < newArr.length ; i++){
        for(let j = 0 ; j < newArr[i].length ; j++){
            if(newArr[i][j] == '*'){
                for(let n = Math.max(0, i - 1) ; n < Math.min(newArr.length, i + 2) ; n++){
                    for(let m = Math.max(0, j - 1) ; m < Math.min(newArr[i].length, j + 2) ; m++){
                        if(newArr[n][m] != '*'){
                            newArr[n][m]++
                        }
                    }
                }
            }
        }
    }
    return newArr
}
for(let i = 0 ; i < input.length - 1 ; i++){
    const [x, y] = input[i].split(' ').map(Number)
    const arr = []
    for(let j = i + 1 ; j <= i + x ; j++){
        arr.push(input[j])
    }
    result.push(getMine(arr, x, y).map(el => el.join('')).join('\n'))
    i += x
}

console.log(result.join('\n'))

'회고' 카테고리의 다른 글

[개발일지] - 575(설날)  (0) 2025.01.28
[개발일지] - 574(임시공휴일)  (0) 2025.01.27
[개발일지] - 572(주말)  (0) 2025.01.25
[개발일지] - 571  (0) 2025.01.24
[개발일지] - 570  (1) 2025.01.23

+ Recent posts