-
matrix_Leetcode_54. Spiral Matrix알고리즘/알고리즘 문제풀이 2025. 4. 14. 17:42
https://leetcode.com/problems/spiral-matrix/description/?envType=study-plan-v2&envId=top-100-liked
문제접근
1. DFS를 사용하여 matrix 탐색
2. Flag를 사용하여 matrix 탐색
위 두 방법을 썼을 때에, 최소 O(mn) ( 어찌 되었든 모든 cell을 방문해야 함 )
줄단위 처리를 고민하며 아래 코드를 작성
특정 경우에 줄단위 처리를 하여 조금 더 빠를 수도 있음!
spiral을 제어하는 move같은경우 enum으로 작성하면 더 좋을 수 있지만,
귀찮았기 때문에,,,,
정답코드
0msBeats100.00%
19.73MBBeats41.55% -> 0.6MB 차이
더보기class Solution { func spiralOrder(_ matrix: [[Int]]) -> [Int] { var curr = matrix { didSet { curr = curr.compactMap { if $0.isEmpty { return nil } else { return $0 } } } } // 0,1,2,3 var move = 0 var sol = [Int]() while !curr.isEmpty { switch move { case 0: let line = curr.removeFirst() sol.append(contentsOf: line) move += 1 case 1: var _curr = curr var verticalLine = [Int]() for i in 0..<curr.count { guard !curr[i].isEmpty else { continue } let value = _curr[i].removeLast() verticalLine.append(value) } sol.append(contentsOf: verticalLine) curr = _curr move += 1 case 2: let reversedHorizontal = curr.removeLast().reversed() sol.append(contentsOf: reversedHorizontal) move += 1 case 3: var reversedVerticalFirstLine = [Int]() for i in (0..<curr.count).reversed() { let ele = curr[i].removeFirst() reversedVerticalFirstLine.append(ele) } sol.append(contentsOf: reversedVerticalFirstLine) move = 0 default: break } } return sol } }
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
matrix_Leetcode_240. Search a 2D Matrix II (0) 2025.04.10 BinaryTree_Leetcode_236. Lowest Common Ancestor of a Binary Tree (0) 2025.04.03 BinaryTree,BFS_Leetcode_199. Binary Tree Right Side View (0) 2025.04.03 PrefixSum_Leetcode_2389. Longest Subsequence With Limited Sum [swift] (0) 2025.04.01 BinaryTree_Leetcode_114. Flatten Binary Tree to Linked List [swift] (0) 2025.04.01