https://leetcode.com/problems/valid-sudoku/
Valid Sudoku - LeetCode
Can you solve this real interview question? Valid Sudoku - Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules: 1. Each row must contain the digits 1-9 without repetition. 2. Each c
leetcode.com
Valid Sudoku - 올바른 스도쿠
Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
- Each row must contain the digits 1-9 without repetition.
- Each column must contain the digits 1-9 without repetition.
- Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 without repetition.
Note:
- A Sudoku board (partially filled) could be valid but is not necessarily solvable.
- Only the filled cells need to be validated according to the mentioned rules.
9 x 9 스도쿠 보드가 올바른지 확인하라. 채워진 칸들만 확인하면 되며 다음 룰들을 따른다.
- 각 행은 반복 없이 1-9까지의 숫자를 가진다.
- 각 열은 반복 없이 1-9까지의 숫자를 가진다.
- 3 x 3의 그리드 박스는 반복 없이 1-9까지의 숫자를 가진다.
Note:
- 올바른지만 확인하면 되며 풀 수 있는지는 확인 안해도 된다.
- 채워진 칸들만 확인하면 된다.
개요
프로그래머스에서도 이와 비슷한 문제들이 몇개 나오는데 난 그때 100줄이 넘어가는 코드로 풀었었다.
이런 유형의 문제에서의 반복은 어쩔수 없지만 어떻게 하면 반복과 노가다를 최대한 줄이냐가 관건이다.
처음에 난 for 문을 3번 돌리면서 행 확인, 열 확인, 3x3칸 확인을 했으나 for 문 1번으로도 사실 가능하다.
Set를 활용하면 되는데 자바스크립트에서는 Set은 key 값 없이 value만 존재하므로 map을 사용하면 풀 수 있다.
풀이 방법
행, 열, 3x3 칸의 중복을 확인 할 map 객체를 3개 만든다.
그리고 for 문을 돌리면서 각 칸의 중복을 확인하면 되는데
행과 열은 간단하지만 3 x 3 칸의 키 값을 설정하려면 트릭을 사용해야 한다.
9 x 9 칸을 9개의 3 x 3 칸의 인덱스 : 행 0~3 열 0~3으로 바꾸려면
단순히 행과 열을 3으로 나눈 후 floor을 사용하면 깔끔하게 인덱스가 맞아떨어진다.
코드를 보면 이해하기 더 쉽다.
풀이
Python에서는 set이 키 값을 가질 수 있어서 키 값마다 일일이
배열을 안 만들어도 되지만 자바스크립트에서는 이렇게 풀 수밖에 없는 것 같다.
풀이를 보고 나서 아 이런 깔끔한 방법이 있구나 하고 놀랐다.
'Blind 75 > Array' 카테고리의 다른 글
Blind 75 | Encode and Decode Strings (Array 8 / 8) (0) | 2023.06.08 |
---|---|
Blind 75 | Longest Consecutive Sequence (Array 7 / 8) (0) | 2023.06.07 |
Blind 75 | Product of Array Except Self (Array 6 / 8) (0) | 2023.06.06 |
Blind 75 | Top K Frequent Elements (Array 5 / 8) (0) | 2023.06.05 |
Blind 75 | Group Anagrams (Array 4 / 8) (0) | 2023.06.04 |