ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2021-02-05] Simplify Path
    카테고리 없음 2021. 2. 5. 23:54
    반응형

    오늘의 문제:

    leetcode.com/explore/challenge/card/february-leetcoding-challenge-2021/584/week-1-february-1st-february-7th/3629/

     

    오늘은 Easy한 문제인 것 같다. linux를 사용하는 개발자라면 당연히 봤을 directory path 문제이다.

     

    예제를 보며 이해해 보자.

     

    입력값으로 string 변수 path가 주어지고, 결과값으로 저 path로 인해 실제 현재의 위치 값을 반환하는 문제이다.

     

    linux system을 사용하지 않는 사람이라면, '..' , '.' 에 대해서 생소할 것이다.

     

    linux에서는 상대적인 경로로 현재 위치를 '.'로 상위 directory 위치를 '..'로 표현한다.

     

    예제 4번을 directory 구조로 표현하면, 아래와 같다.

     

     /
    ├─a
    │  └─b
    └─c

     

    이후 이동 순서는 / -> /a -> /a ( . ) -> /a/b -> /a -> / -> /c

     

    그래서 답은 '/c' 가 된다. directory를 쌓으면서 '..'를 만나면 마지막에 넣은 directory를 빼면 되서,

     

    stack을 이용하면 좋을 것 같다. 아래 코드로 구현해 보았다.

     

    class Solution:
        def simplifyPath(self, path: str) -> str:
            temp=[] # stack
            for check in path.split('/'): # /를 구분자로 directory 이름을 받는다.
                if check == "..": # 상위 directory로 가기 위해 pop() 함수 사용 가능
                    if temp: # stack에 쌓여있을 시 pop()
                        temp.pop()
                    else: # 굳이 필요는 없지만 명시적으로 작성
                        continue
                elif check == "." or check=="": # 현재 위치거나, 아무것도 없을때는 continue
                    continue
                else: # 나머지는 stack에 쌓는다.
                    temp.append('/'+check)
            if not temp:
                return '/'
            return ''.join(temp)

     

    반응형

    댓글

Designed by Tistory.