본문 바로가기
Coding Test/LeetCode

[Javascript] (LeetCode Medium) 841. Keys and Rooms

by Chaedie 2022. 12. 21.
728x90

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

/**
 * @param {number[][]} rooms
 * @return {boolean}
 */
var canVisitAllRooms = function(rooms) {
    const visitedSet = new Set([0])
    const keys = [0]
        
    let keyIndex = 0
    while (keyIndex < keys.length) {
        let visiting = keys[keyIndex]
        
        rooms[visiting].forEach((key) => {
            if (!keys.includes(key)) {
                keys.push(key)    
            }
        })
        
        visitedSet.add(visiting) 
        keyIndex++
    }

    return visitedSet.size === rooms.length
};
  • visitedSet : 방문여부를 체크하는 visitedSet은 중복방지를 위해 SET을 활용했다. 그리고 해당 SET의 Size가 rooms.length와 같은지 true/false를 return 하기로 했다.
  • keys : 얻은 keys도 중복체크를 해야하지만, 일정한 순서를 가지고 다음 방으로 가야하기 때문에 배열로 만들고, if (!keys.includes(key))라는 분기문을 통해 keys에 추가할지 말지를 분기해주었다.
  • while문을 통해 더이상 키가 없을 경우에 return 문으로 내려가도록 했다.

다른 사람 풀이 참고한 풀이

/**
 * @param {number[][]} rooms
 * @return {boolean}
 */
var canVisitAllRooms = function(rooms) {
    const visited = new Set()
    
    function DFS (v) {
        visited.add(v)
        for (let key of rooms[v]) {
            if (!visited.has(key)) {
                DFS(key)
            }    
        }
            
    }
    
    DFS(0)

    return visited.size === rooms.length
};
  • 다른사람들은 대부분 DFS 또는 BFS로 풀었길래 나도 한번 도전해보았다.
  • 아직 DFS,BFS가 익숙하지 않아 꽤 오랜시간이 걸렸는데, 그래도 이 문제를 통해 어느 정도 방문 여부 체크에 대한 개념이 생긴것 같아서 다행이다. 꽤 많은 문제를 풀어봐야 익숙해질것 같다.

배운 점, 느낀 점

  • 오늘로써 LeetCode에서 47문제를 풀었다. 그것마저도 아직 대다수가 Easy 난이도지만, 난이도 보단 꾸준함이 더 중요하다고 생각하기에 개의치 않을 생각이다.
  • 아무튼, 앞으로 최대한 매일 1문제씩 LeetCode에서 문제를 풀 생각이다. 프로그래머스가 공부에 도움이 되지만, 영어 공부도 할 겸, 문제풀이를 통해 순수한 자료구조만 공부하는 겸 LeetCode위주로 풀 생각이다.
  • 2023년 1년간 1문제씩만 풀어도 대략 400문제 까지 풀 수 있으니 꾸준히 해보련다. 화이팅!

댓글