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

코드설명

구현(Implementation) + 문자열(String) 를 활용합니다.

 

문제에 주어진대로 구현하면 되는 문제였지만, 그 구현에서 가장 빠르게 이해해서 구현하는가가 항상 중요합니다. 

먼저, 문제를 보면 "/" 가 아닌, "//" 혹은 "////..." 는 IGNORE 하라는 요구사항이 있습니다.

그에 맞춰서, 그러면 "/" 가 하나 나온뒤, "//" 가 연속으로 모두 나오는지 확인해야할까?라는 생각이 듭니다.

하지만, Split을 활용할경우 반드시 "/"를 기준으로 나뉘기에 바로 구현이 간단해집니다.

 

또 Split한뒤 값들이 == 0 이거나 "." 로 이루어져있는경우는 PASS하고, 
".."인 경우 현재 Path를 하나 제거해주면 됩니다. 

그 외에는 모두 해당 경로에 "/" + Path 로 더해줍니다.

코드

class Solution {
public String simplifyPath(String path) {
StringBuilder sb = new StringBuilder(path);
// if(sb.charAt(0) != '/') sb.deleteCharAt(0);
// if(sb.charAt(sb.length() - 1) == '/') sb.deleteCharAt(sb.length() - 1);
String[] split = sb.toString().split("/");
List<String> arr = new ArrayList<>();
for(String v : split){
if(v.length() == 0 || v.equals(".")) {
continue;
}
else if(v.equals("..")){
if(arr.size() > 0)
arr.remove(arr.size() - 1);
}else {
arr.add("/"+v);
}
}
sb = new StringBuilder();
if(arr.size() == 0) return "/";
for(String v: arr){
sb.append(v);
System.out.println(v);
}
return sb.toString();
}
}

+ Recent posts