https://www.acmicpc.net/problem/17413
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
Stack<Character> stack = new Stack<>();
boolean isTag = false;
for(char x : str.toCharArray()){
if(x == '<'){
isTag = true;
while(!stack.isEmpty()){
System.out.print(stack.pop()); // 스택 값들 모두 pop하여 출력
}
System.out.print(x); // '<' 출력
}
else if(x=='>'){
isTag=false;
System.out.print(x);
}
else if(!isTag){ // 태그 바깥의 값이라면
if(x == ' '){ // 공백을 만나면
while(!stack.isEmpty()) System.out.print(stack.pop()); // 스택 값들 모두 pop하여 출력
System.out.print(x); // 공백까지 출력
}
else stack.push(x); // 스택에 push
}
else if(isTag) System.out.print(x); // 태그 안의 값 그대로 출력
}
while(!stack.isEmpty()){ // 끝에 공백이 없는 마지막 문자열 pop해 출력
System.out.print(stack.pop());
}
}
}
괄호 '<' 를 만나면 isTag 변수를 true로 한다. 그리고 스택에 있던 값들을 모두 pop하여 출력한다.
isTag 변수가 true라면(태그 안의 값이라면) 스택에 푸시없이 그대로 출력한다.
괄호 '>'를 만나면 isTag 변수를 false로 하고, '>'를 출력한다.
태그 바깥의 값이라면 스택에 푸시하고, 공백을 만나면 스택에 있는 값들을 pop하여 출력한다.
이 때 태그 바깥의 값인 문자열 중 마지막 문자열일 경우 문자열 끝에 공백이 없으므로 스택에 남아있게 된다.
그래서 마지막에 스택에 있는 값들을 모두 pop하여 출력해주는 코드를 추가한다.
'ALGORITHM' 카테고리의 다른 글
[JAVA] 백준 5464번- 주차장 (0) | 2022.07.22 |
---|---|
[JAVA] 백준 1157번- 단어 공부 (0) | 2022.07.22 |
[JAVA] 백준 2675번- 문자열 반복 (0) | 2022.07.20 |
[JAVA] 백준 11899번- 괄호 끼워넣기 (0) | 2022.07.20 |
[JAVA] 백준 1935번- 후위 표기식2 (0) | 2022.07.19 |