작심삼일

[LeetCode] 71 | Simplify Path | Python 본문

스터디/코테

[LeetCode] 71 | Simplify Path | Python

yun_s 2022. 3. 14. 10:23
728x90
반응형

문제 링크: https://leetcode.com/problems/simplify-path/


문제

Given a string path, which is an absolute path (starting with a slash '/') to a file or directory in a Unix-style file system, convert it to the simplified canonical path.

In a Unix-style file system, a period '.' refers to the current directory, a double period '..' refers to the directory up a level, and any multiple consecutive slashes (i.e. '//') are treated as a single slash '/'. For this problem, any other format of periods such as '...' are treated as file/directory names.

The canonical path should have the following format:

  • The path starts with a single slash '/'.
  • Any two directories are separated by a single slash '/'.
  • The path does not end with a trailing '/'.
  • The path only contains the directories on the path from the root directory to the target file or directory (i.e., no period '.' or double period '..')

Return the simplified canonical path.


조건

  • 1 <= path.length <= 3000
  • path consists of English letters, digits, period '.', slash '/' or '_'.
  • path is a valid absolute Unix path.

내 풀이

모든 path는 '/'로 구분되므로 '/'로 나눠 리스트를 만든다.

리스트 안의 ''와 '.'는 그 의미가 없으므로 지운다.

리스트 안의 '..'는 상위 폴더로 가야하므로 '..'와 그보다 상위 원소 (ex. path[3]이 '..'라면 상위 원소는 path[2]다.)를 지운다.

'..'의 인덱스가 0이라면 그보다 상위 원소가 존재하지 않으므로 이 경우를 주의해야한다.

다시 '/'로 합치고('/'.join(path)) 맨 앞에 '/'를 추가해준다.


코드

class Solution:
    def simplifyPath(self, path: str) -> str:
        path = path.split('/')
        
        while '' in path:
            path.remove('')
        while '.' in path:
            path.remove('.')
        
        while '..' in path:
            idx = path.index('..')
            del path[idx]
            if idx > 0:
                del path[idx-1]
        
        path = '/'.join(path)
        
        return '/' + path
728x90
반응형
Comments