<아이디어>

문자열 path를 "/"를 기준으로 나누어야 하므로 String.split(), StringTokenizer, String.toChararray() 중 한 가지를 사용해아 한다. 그리고 /..이 있을 경우 전에 있던 경로에서 한칸 앞으로 가야 하는 문제가 있는데 Stack을 활용한다면 쉽게 해결 할 수 있다. 즉 Stack과 Tokenizer를 활용하여 문제에 답에 필요한 문자열 그룹을 확보하고 

마지막으로 StringBuilder를 통해서 문자열 사이사이 "/"를 넣어 반환 한다. 

 

<해답 코드>

import java.util.Stack;
import java.util.StringTokenizer;

class Solution {
    // 시간 복잡도 O(n) 공간 복잡도 O(n)
    public String simplifyPath(String path) {
        Stack<String> stack = new Stack<>();
        // Tokenizer는 split("/+")와 같이 구분되는 문자가 여러개 와도 감안 하여 분할 해준다.
        StringTokenizer st = new StringTokenizer(path,"/");
        StringBuilder ans = new StringBuilder();
        while(st.hasMoreTokens()){
            String tmp = st.nextToken();
            if(tmp.equals("."))
                continue;
            else if(tmp.equals("..")) {
                if (!stack.isEmpty())
                    stack.pop();
            }
            else
                stack.add(tmp);
        }
        
        for (String s : stack) {
            ans.append("/");
            ans.append(s);
        }

        return ans.toString().equals("") ?"/":ans.toString();
    }
}

+ Recent posts