정답자율을 보면 50퍼센트가 넘어가는 문제다.
쉽다고 생각할 수 있지만 나는 꽤나 여러번 반복문을 돌려가고 조건문을 통해 풀 수 있었다.
문제는 간단하다.
문자열S가 주어질때
문자열에 단어들은 공백으로 단어를 구분하고
<,>로 쌓인 문자는 단어가 아니라 태그이다.
ex) </ab cd>ef gh</ij kl>
이문자열중 <>로 쌓여져 있는것은 태그이며 ef gh는 ef, gh라는 단어이다.
공백으로 단어를 구분하여 한단어씩 뒤집어 출력할 것이고
<>로 쌓인 태그들은 그대로 출력할 것이다.
단어들을 뒤집어 출력한다.
이것은 Last In First Out 즉 스택을 활용하면 될 것이다.
그럼 언제 pop()을 실행하면 될것인가?
단어들을 구분짓는 ' '공백이나, 태그를 시작하는 <를 만나면 pop을 해주면 된다.
언제까지?
스택이 비어있지 않으면
import java.util.Stack;
public class mystack {
int i = 0; //baekjoon oline ' ' <- '<' <ab cd>ef gh<ij kl> -> <ab cd>fe hg<ij kl>mh
public String revers(String str) {
Stack<Character> stack = new Stack<>();
String temp = "";//
while (this.i < str.length()){
if (str.charAt(i) == '<'){
while (!stack.isEmpty()){
temp += stack.pop();
}
while (str.charAt(i) != '>'){
temp += str.charAt(i);
i++;
}
} else if (str.charAt(i) == '>'){
temp += str.charAt(i);
i++;
} else if (str.charAt(i) == ' '){
while (!stack.isEmpty()){
temp += stack.pop();
}
temp += ' ';
i++;
} else {
stack.push(str.charAt(i));
i++;
}
}
while (!stack.isEmpty()){
temp += stack.pop();
}
return temp;
}
클래스를 만들고 멤버변수로 i를 지정해주어
주어진 문자열을 하나씩 확인하기로 했다.
' '나 '<'를 만났을때 스택이 비어있지않으면 스택에 쌓인 데이터들을 정답이 될 temp문자열에 붙여주고
스택에 있던 데이터들을 붙여놓고 나면 그다음 잊지 말고 ' '나 '<' 를 문자열에 붙여주어야한다.
조건에 걸릴때마다 i++해주어 문자열을 전체 다 확인할 수있었고
첫번째 반복문이 끝났을때 ' '나 '<'를 만나지않았을 수도 있기때문에
다시한번 스택이 비어있지않다면 스택.pop을 해주어 문자열에 붙여주면 정답이 될
리턴을 구할 수 있다.
Wow!!
훠오!!
완전 뒤집어 놓으셨다!!