링크 : https://leetcode.com/problems/simplify-path/description/
문제 설명
You are given an absolute path for a Unix-style file system, which always begins with a slash '/'. Your task is to transform this absolute path into its simplified canonical path.
The rules of a Unix-style file system are as follows:
- A single period '.' represents the current directory.
- A double period '..' represents the previous/parent directory.
- Multiple consecutive slashes such as '//' and '///' are treated as a single slash '/'.
- Any sequence of periods that does not match the rules above should be treated as a valid directory or file name. For example, '...' and '....' are valid directory or file names.
The simplified canonical path should follow these rules:
- The path must start with a single slash '/'.
- Directories within the path must be separated by exactly one slash '/'.
- The path must not end with a slash '/', unless it is the root directory.
- The path must not have any single or double periods ('.' and '..') used to denote current or parent directories.
Return the simplified canonical path.
Example 1:
Input: path = "/home/"
Output: "/home"
Explanation:
The trailing slash should be removed.
Example 2:
Input: path = "/home//foo/"
Output: "/home/foo"
Explanation:
Multiple consecutive slashes are replaced by a single one.
Example 3:
Input: path = "/home/user/Documents/../Pictures"
Output: "/home/user/Pictures"
Explanation:
A double period ".." refers to the directory up a level (the parent directory).
Example 4:
Input: path = "/../"
Output: "/"
Explanation:
Going one level up from the root directory is not possible.
Example 5:
Input: path = "/.../a/../b/c/../d/./"
Output: "/.../b/d"
Explanation:
"..." is a valid name for a directory in this problem.
Constraints:
- 1 <= path.length <= 3000
- path consists of English letters, digits, period '.', slash '/' or '_'.
- path is a valid absolute Unix path.
문제 풀이
'/' 를 기준으로 문자열을 나눈 뒤, 나눈 문자열을 가지고 최종 path를 생성
1. 빈 문자열이거나 .(현재 디렉토리) 인 경우 처리가 필요없으므로 continue
2. ..(이전 디렉토리)인 경우 answer(현재 경로)의 길이가 1이상일 경우 맨 위의 원소를 뺌
3. 아닌 경우 answer에 경로 추가
최종적으로 answer를 '/'로 이어 붙이면 됨
/**
* @param {string} path
* @return {string}
*/
var simplifyPath = function(path) {
const p = path.split('/');
const answer = [];
for (let i = 0; i < p.length; i++) {
if (p[i] === '' || p[i] === '.') continue;
if (p[i] === '..') {
if (answer.length > 0) {
answer.pop();
}
} else {
answer.push(p[i]);
}
}
return '/' + answer.join('/');
};
결론
stack을 이용한 구현 문제
'코딩테스트 > LeetCode' 카테고리의 다른 글
| LeetCode Remove Duplicates from Sorted Array ll (JavaScript) (0) | 2025.12.17 |
|---|---|
| LeetCode Set Matrix Zeroes (JavaScript) (0) | 2025.12.16 |
| LeetCode Minimum Path Sum (JavaScript) (0) | 2025.12.11 |
| LeetCode Unique Paths (JavaScript) (0) | 2025.12.10 |
| LeetCode Pascal's Triangle (JavaScript) (0) | 2025.12.09 |