Leetcode Java Simplify Path
업데이트:
문제
코드
class Solution {
public String simplifyPath(String path) {
Stack<String> stack = new Stack<>();
for (String directory : path.split("/")) {
switch (directory) {
case "":case ".": continue;
case "..": this.popStackIsNotEmpty(stack); break;
default: stack.push(directory);
}
}
return this.getPath(stack);
}
private void popStackIsNotEmpty(Stack<String> stack) {
if (!stack.isEmpty()) {
stack.pop();
}
}
private String getPath(Stack<String> stack) {
StringBuilder sb = new StringBuilder();
for (String directory : stack) {
sb.append("/").append(directory);
}
return sb.length() == 0 ? "/" : sb.toString();
}
}
결과
설명
-
주어진 문자열 File path에 대한 절대 경로를 단순화된 표준 경로를 구하는 문제이다.
-
단순화된 표준 경로를 구하기 위해 변수 stack을 정의한다.
- 주어진 변수 path를 “/”를 구분자로 디렉토리 이름인 문자열을 분리하여 반복하여 단순화된 표준 경로를 구한다.
- 디렉토리 명이 ““이거나 “.”일 경우, 무시하고 계속 반복한다.
- 디렉토리 명이 “..”일 경우, 상위 경로를 의미하므로 stack이 비어있지 않은 경우에만 최근 값을 꺼낸다.
- 그 외의 경우, 디렉토리 이름을 stack에 저장한다.
- 3번을 통해 표준 경로를 만들기 위한 디렉토리 이름이 저장된 stack을 이용하여 아래 규칙을 만족하는 단순화된 표준 경로를 만든다.
- Path의 첫 시작은 “/”으로 시작해야 한다.
- 각 디렉토리는 “/”로 구분된다.
- 경로의 마지막은 “/”로 끝나지 않는다.
- 경로는 루트 디렉터리에서 대상이 되는 파일 혹은 디렉터리로의 경로만 포함된다.
- 4번을 통해 조합된 단순화된 표준 경로를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기