작성
·
151
1
public String solve(String s) {
Stack<Integer> countStack = new Stack<>();
Stack<StringBuilder> stringStack = new Stack<>();
StringBuilder tmp = new StringBuilder();
StringBuilder result = new StringBuilder();
int k = 0;
for(char c : s.toCharArray()) {
if(Character.isDigit(c)) {
k = k*10 +c-'0'; //1, 12
}
else if(c =='[') {
countStack.push(k);
tmp = new StringBuilder();
k=0;
}
else if(c ==']') {
System.out.println("~~~~~" + tmp);
stringStack.push(tmp);
StringBuilder str = stringStack.pop();
for(int i=countStack.pop();i>0; i--) {
System.out.println("!!!!!!!!!!!!!!" + tmp);
str.append(tmp);
}
result.append(str);
}
else {
tmp.append(c);
}
}
return result.toString();
}
}
=======================
~~~~~ 와 출력되는 tmp가 맞는 출력입니다
!!!!!!!!!!!!!!와 출력되는 동일한 tmp는 위의 출력결과의 두배로 출력됩니다ㅜ
해결법을 찾지 못하여 질문 드립니다.
감사합니다.
답변 1
0
질문주신 내용:
!!!!!!!!!!!!!!와 출력되는 동일한 tmp는 위의 출력결과의 두배로 출력됩니다ㅜ
답변:
StringBuilder tmp = new StringBuilder();
StringBuilder result = new StringBuilder();
2개를 만드신 이유가 무엇인지요? 제가 의도를 정확히 이해를 못했네요
일단 아래그림에서 보면
'[' 로 진입시점에 result를 초기화 해줍니다.
제안드리고 싶은것은
1. 담을 그릇을 하나로 가져가기
2. 담을 때 초기화 해주기
제 답변이 빈약할수 있습니다. 혹시 더 궁금하신부분은 다시 질문 주세요
감사합니다.