코딩 테스트/LeetCode(swift)

[LeetCode] 133. Clone Graph

Skillist 2022. 2. 20. 13:53
반응형

문제

https://leetcode.com/problems/clone-graph/

 

Clone Graph - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

———————————————————————————

 

잠깐만

leetCode에서 그래프 문제는 처음이에요.

그래서 그런지, 그래프 개념은 있지만,

leetCode의 그래프 문제에 대한 input과 output에 대한 이해가 어려웠어요.

문제나 input, output을 이해하셨다면, 문제 풀이에 문제 없어요.

———————————————————————————

 

코드

/**
 * Definition for a Node.
 * public class Node {
 *     public var val: Int
 *     public var neighbors: [Node?]
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.neighbors = []
 *     }
 * }
 */

class Solution {
    var isVisited: [Int: Node] = [:]
    func cloneGraph(_ node: Node?) -> Node? {
        guard let node = node else {
            return nil
        }
    
        let copiedNode = Node(node.val)
        isVisited[copiedNode.val] = copiedNode
    
        node.neighbors.forEach {
            if let node = $0, let visitedNode = isVisited[node.val] {
                copiedNode.neighbors.append(visitedNode)
            } else {
                let copiedNeighborNode = cloneGraph($0)
                copiedNode.neighbors.append(copiedNeighborNode)
            }
        }
        return copiedNode
    }
}

———————————————————————————

 

설명

재귀함수를 통해서, 모든 노드를 탐색하고, 리턴하고 있습니다.

visit 체크를 해야, 무한 루프에 빠지지 않고 정상종료할 수 있습니다.

———————————————————————————

 

회고

그래프 문제 시작인데, 워밍업으로 좋아보이네요.

반응형