LeetCode Simplify Path (JavaScript)

2025. 12. 15. 18:32·코딩테스트/LeetCode

링크 : 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
'코딩테스트/LeetCode' 카테고리의 다른 글
  • LeetCode Remove Duplicates from Sorted Array ll (JavaScript)
  • LeetCode Set Matrix Zeroes (JavaScript)
  • LeetCode Minimum Path Sum (JavaScript)
  • LeetCode Unique Paths (JavaScript)
의현
의현
개발하는 하루
  • 의현
    UIHYEON
    의현
  • 링크

    • 김의현 포트폴리오
    • GitHub
    • LinkedIn
  • 전체
    오늘
    어제
    • 분류 전체보기 (215) N
      • 프론트엔드 (65) N
        • JavaScript (52) N
        • HTML (3)
        • React (7)
        • CSS (2)
        • CS (1)
      • 프로젝트 (19)
        • Portfolio 사이트 개발 (19)
      • 코딩테스트 (128) N
        • Binary Search (2)
        • bfs (Breadth-first s.. (4)
        • dfs (Deapth-first se.. (1)
        • Greedy (1)
        • Dynamic Programming (1)
        • two pointer (4)
        • 구현 (2)
        • LIS(Longest Increasi.. (0)
        • 문자열 (3)
        • 자료구조 (6)
        • 비트마스크 (2)
        • 수학 (2)
        • 프로그래머스 (61)
        • LeetCode (39) N
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
의현
LeetCode Simplify Path (JavaScript)
상단으로

티스토리툴바