https://www.acmicpc.net/problem/17413
단어뒤집기1 문제의 응용버전으로 크게 태그 안에 있는 단어인지 태그 밖에 있는 단어인지 구분하는 것이 이 문제의 포인트이다.
import java.io.*;
import java.util.Stack;
/**
* 단어 뒤집기 문제 응용 - 스택
* <> 태그 안에 있는 문자는 그대로 출력
* <> 태그 밖에 있는 문자는 뒤집어서 출력
*/
public class b17413 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine();
boolean tag = false; // 태그 구분 변수
Stack<Character> stack = new Stack<>();
for (char ch : input.toCharArray()) {
if (ch == '<') { // 시작하는 태그라면
tag = true;
while (!stack.empty()) {
bw.write(stack.pop()); // 태그 전까지의 단어 뒤집어서 출력
}
bw.write(ch); // < 출력
} else if (ch == '>') { // 끝나는 태그라면
tag = false;
bw.write(ch); // > 출력
} else if (tag) { // 태그 안에 있는 단어라면
bw.write(ch); // 그대로 출력
} else { // 태그 안에 있는 단어가 아니라면 기존 단어 뒤집기와 동일한 로직
if (ch == ' ') {
while (!stack.empty()) {
bw.write(stack.pop());
}
bw.write(ch);
} else {
stack.push(ch);
}
}
}
while (!stack.empty()) {
bw.write(stack.pop());
}
bw.flush();
}
}