오늘 할일
1. LeetCode
오늘 한일
1. LeetCode
public String decodeString(String s) {
StringBuilder stringBuilder=new StringBuilder();
Stack<Integer> stack=new Stack<>();
StringBuilder integer_parser=new StringBuilder();
StringBuilder result=new StringBuilder();
for(char c: s.toCharArray()){
if('0'<=c && c<='9'){//숫자라면
integer_parser.append(c);
} else if(c=='['){
int repeat=Integer.valueOf(integer_parser.toString());
integer_parser.delete(0, integer_parser.length());
stack.push(repeat);
} else if('a'<=c && c<='z'){
stringBuilder.append(c);
} else if(c==']'){
String k=stringBuilder.toString().repeat(stack.pop());
stringBuilder.delete(0, stringBuilder.length());
result.append(k);
}
}
return result.toString();
}
테스트 케이스 통과도 못하고, 전반적으로 난해하다는 단점이 있어 이를 보완해보기로 했다.
두번째 접근으로 문제를 최대한 간단하게 생각해보자. 괄호는 연산자이다. 괄호 앞의 숫자와 괄호안의 문자간의 .repeat연산. 다만 이때 2(3+1)2처럼 연속되는 연산이 있을 뿐이다.
2[2[df]]는 22"df"
3[a]2[bc]는 3"a"+2"bc",
3[a2[c]]는 3("a"+2"c"),
2[abc]3[cd]ef는 2"abc"+3"cd"+ef
숫자 뒤 괄호열림은 *연산, ]뒤 숫자는 +연산, 문자뒤 숫자도 +연산, [없이 문자는 +연산