😎풀이

  1. n * n보드의 모든 셀 값을 1로 초기화
  2. mines에 해당하는 셀의 지뢰(0) 추가
  3. 모든 셀을 순회하며 생성 가능한 가장 큰 + 형태의 크기 갱신
    3-1. 즉, 4면에서 가장 짧은 길이가 생성 가능한 해당 셀의 가장 큰 + 기호가 됨
function orderOfLargestPlusSign(n: number, mines: number[][]): number {
    let largetPlusSign = 0
    const board = Array.from({ length: n }, () => Array(n).fill(1))
    for(const [y, x] of mines) {
        board[y][x] = 0
    }
    for(let y = 0; y < n; y++) {
        for(let x = 0; x < n; x++) {
            if(board[y][x] === 0) continue
            let topLen = 0
            for(let i = y; i >= 0; i--) {
                if(board[i][x] === 0) break
                topLen++
            }
            let bottomLen = 0
            for(let i = y; i < n; i++) {
                if(board[i][x] === 0) break
                bottomLen++
            }
            let leftLen = 0
            for(let i = x; i >= 0; i--) {
                if(board[y][i] === 0) break
                leftLen++
            }
            let rightLen = 0
            for(let i = x; i < n; i++) {
                if(board[y][i] === 0) break
                rightLen++
            }
            const plusSign = Math.min(topLen, bottomLen, leftLen, rightLen)
            largetPlusSign = Math.max(largetPlusSign, plusSign)
        }
    }
    return largetPlusSign
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글