Leet Code - Valid Sudoku

hatban·2022년 9월 15일

Valid Sudoku

✔️ 문제 링크

https://leetcode.com/explore/learn/card/hash-table/185/hash_table_design_the_key/1126/

수도쿠 문제의 column과 row값을 지정하는 것.. 그리고 한 박스내의 값을 지정하는 것이 너무 헷갈린다 흑흑..

하나의 박스를 기준으로 잡고 전체적으로는 박스1, 박스2, 박스3...박스9 이렇게 박스단위로 비교하되,
박스 내에서는 [0, 0] , [1, 0], [2, 0],[0, 1] ... [2,2] 순서로 위에서 아래 방향으로 비교한다..


우선 코드부터 보자면
var isValidSudoku = function(board) {
    for(var i = 0; i < board.length; i++){
        var rows = [];
        var cols = [];

        var square_x = i % 3;
        var square_y = Math.floor(i / 3); 
        var square_numbers = [];        
        
        for(var j = 0; j < board.length; j++){
            var column = j % 3;
            var row = Math.floor(j / 3);

            var value = board[square_x * 3 + column][square_y * 3 + row];

            if(square_numbers.includes(value) && value != ".") return false;
            else square_numbers.push(value);
            
            if((rows.includes(board[i][j]) && board[i][j] != ".") || (cols.includes(board[j][i]) && board[j][i] != ".")) return false;
            rows.push(board[i][j])
            cols.push(board[j][i])
        }
    }

    return true;
};

square_x : 몇번째 박스인지 구할때 x축 기준
square_y : 몇번째 박스인지 구할때 y축 기준

column : 한 박스내에서의 열
row : 한 박스 내에서의 행

i = 0일때만 예시로 보자면
square_x = 0, square_y = 0

j = 0 : column = 0 row = 0 => value = board[0][0]
j = 1 : column = 1 row = 0 => value = board[1][0]
j = 2 : column = 2 row = 0 => value = board[2][0]
j = 3 : column = 0 row = 0 => value = board[0][1]
j = 4 : column = 1 row = 0 => value = board[1][1]
j = 5 : column = 2 row = 0 => value = board[2][1]
j = 6 : column = 0 row = 0 => value = board[0][2]
j = 7 : column = 1 row = 0 => value = board[1][2]
j = 8 : column = 2 row = 0 => value = board[2][1]

따라서 나는 박스를 하나씩 돌면서, 박스내에서는 위에서 아래로, 즉 같은 열의 행들을 비교한 뒤 다음 열로 넘어가는 방식으로 이해했다.

0개의 댓글