[String,Queue문제] LEETCODE 71. Simplify Path

relight123 Kim·2023년 9월 25일

알고리즘

목록 보기
14/22
post-thumbnail

문제

https://leetcode.com/problems/simplify-path/

문제풀이

1.입력 경로를 데크(queue)로 변환하여 문자열을 하나씩 처리한다.(파이선 Split 함수를 사용했으면 이렇게 할 필요가 없이 효율적으로 처리했을 듯하다)
2.searchFile 함수를 사용하여 경로에서 다음 파일 이름을 추출하고 처리되지 않은 경로(queue)를 반환한다.
3.파일 이름이 "/.."인 경우 상위 디렉토리로 이동하고, 상위 디렉토리로 이동한 만큼 경로에서 이전 파일을 제거한다.
4.파일 이름이 "/." 또는 "/"인 경우 아무 작업도 수행하지 않고 무시한다.
5.그 외의 경우 파일 이름을 경로에 추가하고 FileMemory에 저장한다.
모든 파일을 처리한 후, 최종 결과 문자열을 반환합니다. 만약 경로가 비어있다면 루트 디렉토리인 "/"를 반환ㅎ한다.

코드

class Solution:
    def simplifyPath(self, path: str) -> str:
       
        def searchFile(queuepath):
            queue = queuepath
            File = ""
            File+=(queue.popleft())
            while queue:
                if queue[0]=="/":
                    break               
                File+=(queue.popleft())
            return (queue),(File)
        
        queue=deque(path)
        ans=""
        FileMemory = deque()
        while queue:
            queue,nextFile = searchFile(queue)
            if nextFile =="/..":
                currFile=FileMemory.pop() if FileMemory else ""               
                ans=ans[:-len(currFile)]
            elif nextFile == "/." or nextFile == "/" :
                continue
            else:
                ans+=nextFile
                FileMemory.append(nextFile)
        return ans if len(ans)>0 else "/"
        
솔루션 코드    
from collections import deque

class Solution:
    def simplifyPath(self, path: str) -> str:
        stack = deque()
        parts = path.split('/')  # 경로를 슬래시로 분할
        
        for part in parts:
            if part == '..':
                if stack:
                    stack.pop()  # 상위 디렉토리로 이동
            elif part and part != '.':
                stack.append(part)  # 현재 디렉토리 추가
        
        simplified_path = '/' + '/'.join(stack)
        return simplified_path if simplified_path else '/'

![](https://velog.velcdn.com/images/relighting123/post/485b12ee-7492-4a03-aedf-1b72aa4be83b/image.png)

Lookback

  1. 이번 문제는 문자열 처리와 Queue 활용 능력에 관한 문제로 접근하였다. 문자열 처리에 있어서 나는 글자 하나하나 탐색하면서 처리하였는데 python.split 함수 사용시에 손쉽게 처리할 수 있었을 것 같다.

python.split
path가 "/a/./b/../../c/"인 경우, path.split('/')를 사용하면 다음과 같이 분할되게 됨
["","a",".","b","..","..","c".""]

  1. 솔루션 코드상 결과 처리시 join 함수를 사용하였는데 이 함수 또한 추후 유용하게 사용할 수 있을 것 같다.

    '/'.join(stack): 스택(stack)에 있는 모든 문자열 요소를 슬래시(/)로 연결함. 예를 들어, 스택에 ['a', 'b', 'c']가 있다면 이를 'a/b/c'를 반환

  1. 문제 자체의 난이도는 높지 않았으나 이번 문제를 통해 파이선 기반 문자열 처리시 아직 많은 기능을 아직 사용해보지 못한 것 같다. 스터디와 보완이 필요할 듯하다.
profile
하루를 성실하게

0개의 댓글