71. Simplify path

Yongsang Yoon·2022년 3월 14일
0

LeetCode

목록 보기
7/9

어렵게 생각했다..
한 글자씩 읽어가며 처리하려고했다.
그러다보니 경우의수도많았고 예외처리가 많아졌다.

class Solution:
    def simplifyPath(self, path):
        slash ='/'
        target = path
        results =''

        while len(target) != 0:
            print('target-->', target)
            
            if len(target) ==1:
                return results

            idx = 1
            while target[idx] == slash:
                idx+=1
    
            target = target[idx-1:]  ## ///home --> /home

            print('\trenew-->',target)
            second = target.find('/', 1)
            print('second', second)
            
            
            if second == -1: ## no more slash
                # either only dname is left or blank
                dname = target[1:]
            else:
                dname = target[1:second]


            print('dname' , dname)
            if dname == '.' or dname == ' ':  # current directory
                pass
            elif dname == '..': # parent directory
                results = results[::-1]
                rev_slash = results.find(slash) 
                results = results[rev_slash+1:][::-1]
            else:
                results = results + '/' + dname
                
        
            if second == -1:
                return results
            else:
                target = target[second:]

        return results

우연히 알게되었는데. str.split() 기능을 쓰면 너무나도 간단하게 해결이 된다...

class Solution:
    def simplifyPath(self, path):
        
        words = path.split('/')
        print(words)
        results = []
        for w in words:
            print(results)
            if w == '' or w=='.':
                pass
            elif w=='..':
                if len(results) > 0:
                    del results[-1]
            else:
                results.append(w)

        return '/'+ '/'.join(results)

주의할 점

  1. substring에서 index 구할 때 조심하자.
raw = 12345
raw.index(5) =4
raw[1:].index(5) =3
  1. find() index() 구분해서 쓰자.
    index()는 문자,리스트,튜플 모두 사용가능하나 원소가 없으면 ValueError를 던진다.
    반면에 find()의 경우 문자열에서만 사용가능하며 원소가 없으면 -1을 반환한다.
profile
I'm a student

0개의 댓글