개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (285)
    • Web Front End (74)
      • Javascript & Typescript (26)
      • React (11)
      • Vue (4)
      • Nodejs (1)
      • HTML (6)
      • CSS (7)
      • HTTP (6)
      • 책 - Review (8)
    • TIL (0)
    • Problem Solved (135)
      • 알고리즘 (4)
      • BOJ (67)
      • Programmers (8)
      • HackerRank (33)
      • LeetCode (23)
    • 회고 (4)
      • 오늘의 회고 (16)
      • 주간 회고 (15)
      • 월간 회고 (7)
      • WakaTime (9)
    • Git (3)
    • 기타 (15)
      • 취업 (5)
      • 자격증 (1)

블로그 메뉴

  • GitHub
  • LinkedIn
  • 홈

인기 글

태그

  • 개발자
  • 릿코드
  • 오늘의회고
  • 노개북
  • 회고
  • JavaScript
  • TypeScript
  • 노마드북클럽
  • 프론트엔드
  • 자바스크립트

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이

개발후라이

Problem Solved/LeetCode

[LeetCode] 36번 문제 - Valid Sudoku

2020. 5. 14. 16:37
반응형

문제

36. Valid Sudoku

문제 설명

수도쿠가 유효한지 확인하는 문제

수도쿠가 유효한지 확인하려면 행, 열, 3*3 묶음에 모두 중복되는 숫자가 없어야 한다.
나는 이를 처리하기 위해 .을 제외한 숫자들을 Set에 넣어 개수를 비교하는 isValidColumn 함수를 만들었다.
isValidColumn 는 9개의 한 묶음을 비교하기 위한 것이기 때문에 배열 9개 묶음이 있어야 한다.
행은 원래 그대로 비교하면 되기 때문에 그대로 비교하고, 열과 3*3은 배열 묶음으로 만들기 위해 rotateMatrix, extractMatrix 함수를 만들었다.
마지막으로 모든 결과가 true이면 true이도록 every 메소드를 사용했다.

성공 코드

const isValidSudoku = (board) => {
    return board.every(column => isValidColumn(column))
        && rotateMatrix(board).every(column => isValidColumn(column))
        && extractMatrix(board).every(column => isValidColumn(column))  
};

const isValidColumn = (column) => {
    const onlyNums = column.filter(num => num !== ".");
    const set = new Set(onlyNums);
    return set.size === onlyNums.length;
};

const rotateMatrix = matrix => (
    matrix[0].map((column, index) => (
    matrix.map(row => row[index])
  ))
);

const extractMatrix = matrix => {
  const squares = [
    [], [], [], [], [], [], [], [], []
  ];

  matrix.forEach((row, rowIndex) => {
    row.forEach((cell, columnIndex) => {
      const squareIndex = (Math.floor(rowIndex / 3) * 3) + Math.floor(columnIndex / 3);

      squares[squareIndex].push(cell);
    })
  });

  return squares;
}
반응형
저작자표시 (새창열림)
    'Problem Solved/LeetCode' 카테고리의 다른 글
    • [LeetCode] 242번 문제 - Valid Anagram
    • [LeetCode] 387번 문제 - First Unique Character in a String
    • [LeetCode] 1번 문제 - Two Sum
    • [LeetCode] 283번 문제 - Move Zeroes
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바