[스위프트][Leet Code - Simplify Path][Medium] (Stack)
Categories: leetcode
Tags: Coding Test LeetCode Stack Swift Algorithm
🧞♂️ 난이도
Medium
🧞♂️ 문제
Simplify Path
🧞♂️ 유형
자료구조(Stack)
🧞♂️ 풀이
이 문제는 문제를 이해하기만 하면 금방 풀 수 있습니다. 주요 로직은 다음과 같습니다.
/
를 기준으로split
한다.Swift
의split(separator: "/")
를 사용하면//
도 처리해준다
.
처리.
가 나오면 현재 이건absolute path
에서 현재directory
를 의미하는 것이기 때문에canonical path
에는 포함 안시키면 된다.
- ’..’ 처리
- 윗 directory로 가는 커맨드이기 때문에
stack
의 마지막 요소를pop
한다.
- 윗 directory로 가는 커맨드이기 때문에
- 그외의 제외한 모든 데이터는 스택에 때려넣는다.
- 마지막에
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: "/"))"
}
}