문자열을 입력받아 뒤집는 문제다. 뒤집을 때, 처음과 끝이 <>인 문자열들은 뒤집지 않고 그대로 출력되는 것이 조건이다.
나는 이 문제에 스택을 사용해서 풀어보겠다. 결국, 단어를 쌓고 반대로 출력할 때는 스택에서 pop을 해줘야하므로, 공백과 <>같은 예외를 처리해주는 방향으로 문제를 풀 것이다.
예외를 모두 적어두고, 그에 맞게 구조를 짜야했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Hello_world {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Character> stack = new Stack<>();
String str = br.readLine();
StringBuilder sb = new StringBuilder();
boolean inside = false;
for(int i =0; i<str.length(); i++) {
//<이 시작될 때,
if(str.charAt(i) == '<') {
inside = true;
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
sb.append(str.charAt(i));
}
//>을 만났을 때
else if(str.charAt(i) == '>') {
inside = false;
sb.append(str.charAt(i));
}
//<> 안에 있을 때,
else if(inside) {
sb.append(str.charAt(i));
}
//<>밖에 있을 때,
else if(!inside) {
//공백일 때,
if(str.charAt(i) == ' ') {
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
sb.append(str.charAt(i));
} else { //공백이 아닐때,
stack.push(str.charAt(i));
}
}
}
//stack에 쌓인 나머지 pop
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
System.out.print(sb);
}
}