강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của lisasje02251918
lisasje02251918

câu hỏi đã được viết

Các khái niệm và vấn đề bạn phải biết trước khi thi viết code (với Java)

Vấn đề 2) Sử dụng ngăn xếp

질문 드립니다!

Viết

·

238

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는 위의 출력결과의 두배로 출력됩니다ㅜ

해결법을 찾지 못하여 질문 드립니다.

감사합니다.

java코테 준비 같이 해요!

Câu trả lời 1

0

pushupman님의 프로필 이미지
pushupman
Người chia sẻ kiến thức

 

lisasje0225 님 안녕하세요~

 

질문주신 내용:

!!!!!!!!!!!!!!와 출력되는 동일한 tmp는 위의 출력결과의 두배로 출력됩니다ㅜ

 

 

답변:

StringBuilder tmp = new StringBuilder();

StringBuilder result = new StringBuilder();

2개를 만드신 이유가 무엇인지요? 제가 의도를 정확히 이해를 못했네요

 

일단 아래그림에서 보면

'[' 로 진입시점에 result를 초기화 해줍니다.

제안드리고 싶은것은

1. 담을 그릇을 하나로 가져가기 

2. 담을 때 초기화 해주기 

 

제 답변이 빈약할수 있습니다.  혹시 더 궁금하신부분은 다시 질문 주세요

감사합니다.

Hình ảnh hồ sơ của lisasje02251918
lisasje02251918

câu hỏi đã được viết

Đặt câu hỏi