[스위프트][Leet Code - Simplify Path][Medium] (Stack)

Date:     Updated:

Categories:

Tags:

🧞‍♂️ 난이도

Medium


🧞‍♂️ 문제

Simplify Path

https://leetcode.com/problems/simplify-path/

🧞‍♂️ 유형

자료구조(Stack)


🧞‍♂️ 풀이

이 문제는 문제를 이해하기만 하면 금방 풀 수 있습니다. 주요 로직은 다음과 같습니다.

  1. / 를 기준으로 split 한다.
    • Swiftsplit(separator: "/") 를 사용하면 // 도 처리해준다
  2. . 처리
    • . 가 나오면 현재 이건 absolute path에서 현재 directory를 의미하는 것이기 때문에 canonical path 에는 포함 안시키면 된다.
  3. ’..’ 처리
    • 윗 directory로 가는 커맨드이기 때문에 stack의 마지막 요소를 pop 한다.
  4. 그외의 제외한 모든 데이터는 스택에 때려넣는다.
  5. 마지막에 stack에 남아있는 걸 join 해서 반환한다.

🧞‍♂️ 사용했던 테스트 케이스

// 제공된 TC
let tc1 = "/home/"
let tc2 = "/../"
let tc3 = "/home//foo/"
// 생각해본 TC
let tc2 = "/home//.../olaf/.././_"
    -> "/home/.../_"
let tc3 = "/home/../test/../current/asdf/.././"
    > "/current"

🧞‍♂️ 스위프트 풀이

class Solution {
    func simplifyPath(_ path: String) -> String {
        var stack: [String] = []
        
        for subPath in path.split(separator: "/") {
            if subPath == "." {
                continue
            } else if subPath == ".." {
                if !stack.isEmpty {
                    stack.removeLast()
                }
            } else {
                stack.append(String(subPath))
            }
        }
        return "/\(stack.joined(separator: "/"))"
    }
}


맨 위로 이동하기

leetcode 카테고리 내 다른 글 보러가기