[leetcode, JS] 36. Valid Sudoku

mxxn·2023년 9월 8일
0

leetcode

목록 보기
71/198

문제

문제 링크 : Valid Sudoku

풀이

/**
 * @param {character[][]} board
 * @return {boolean}
 */
var isValidSudoku = function(board) {
    for(let i =0; i<board.length;i++){
        let rowMap = {}
        let colMap = {}
        let boxMap = {}
        for(let j=0; j<board[i].length;j++){

            let box = board[3* Math.floor(i/3) +Math.floor(j/3)][3*(i%3)+(j%3)]
            
            if(board[i][j] != '.'){
                if(rowMap[board[i][j]]) return false;
                rowMap[board[i][j]] = 1;
            }
            if(board[j][i] != '.') {
                if(colMap[board[j][i]]) return false;
                colMap[board[j][i]] = 1;
            }
            if(box!= '.'){
                if(boxMap[box]) return false;
                boxMap[box] = 1;
            }
        }
    }
    return true;
};
  1. 풀이를 보고 진행
  2. 첫번째 for문에서 row,col,box 값을 빈 객체로 만들어두고
  3. 두번째 for문을 돌면서 row,col,box값 비교
  4. box값은 첫 row에선 top,left / 두번째 row에선 top,middle / 세번째 row에선 top, left 식으로 값을 생성하여 비교하는 방식
  • Runtime 63 ms, Memory 44.8 MB

다른 풀이

/**
 * @param {character[][]} board
 * @return {boolean}
 */
var isValidSudoku = function(board) {
    const unique = new Set()
    
    for(var i = 0; i < board.length; i++){
        for(var j = 0; j < board.length; j++){
            const val = board[i][j]
            if(val !== '.'){
                const row = `${val} - ${i}`
                const col = `${val} -  ${j}`
                const sub = `${val} - ${Math.floor(i/3)} - ${Math.floor(j/3)}`
                if(unique.has(row) || unique.has(col) || unique.has(sub)){
                    return false
                }

                unique.add(row)
                unique.add(col)
                unique.add(sub)
            }
            
        }
    }
    return true
};
  1. Set을 만들고, 해당 set에 row,col,sub을 넣고 값이 있는지 비교
  • Runtime 70 ms, Memory 44.3 MB
profile
내일도 글쓰기

0개의 댓글