문제 조건
문제
입력
출력
더보기
예제 입력 1
baekjoon online judge
예제 출력 1
noojkeab enilno egduj
예제 입력 2
<open>tag<close>
예제 출력 2
<open>gat<close>
예제 입력 3
<ab cd>ef gh<ij kl>
예제 출력 3
<ab cd>fe hg<ij kl>
예제 입력 4
one1 two2 three3 4fourr 5five 6six
예제 출력 4
1eno 2owt 3eerht rruof4 evif5 xis6
예제 입력 5
<int><max>2147483647<long long><max>9223372036854775807
예제 출력 5
<int><max>7463847412<long long><max>7085774586302733229
예제 입력 6
<problem>17413<is hardest>problem ever<end>
예제 출력 6
<problem>31471<is hardest>melborp reve<end>
예제 입력 7
< space >space space space< spa c e>
예제 출력 7
< space >ecaps ecaps ecaps< spa c e>
문제 분석
- 입력되는 경우를 잘 분류하여 입력된 문자에 해당하는 case에 맞게 구현한다.
문제 풀이
1) '<'가 들어오는 경우 '>'문자가 나올 때까지 그대로 출력한다.
2) 일반 문자가 들어왔을 경우 스택에 넣어둔다. (cf. '<'나 ' '를 만났을 때 스택에 있는 내용을 뽑아서 출력한다.)
cf) 문자열대로 출력을 끝내면 마지막 문자열이 스택에 들어가있기때문에 꼭 마지막까지 스택에서 뽑아서 출력해줘야 한다.
->ex : 1eno 2owt 3eerht rruof4 evif5 xis6
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder("");
Stack<Character> stack = new Stack<>();
boolean chk = false;
String s = br.readLine();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (chk == true) { // 괄호가 열려있을 때는 그냥 바로 출력한다.
sb.append(ch);
}
if (ch == '>') { // 괄호가 닫힐 경우
stack.clear();
chk = false;
} else if (ch == '<') { // 괄호가 열릴 경우
while (!stack.isEmpty()) { // 기존에 스택에 있던 문자열 전부 출력
sb.append(stack.pop());
}
sb.append(ch);
chk = true;
} else { // 문자열이거나 공백일 경우
if (ch == ' ' && chk == false) { // 공백일 경우 (cf.괄호가 열렸을 때의 공백은 제외한다)
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
sb.append(ch);
} else { //문자열일 경우 스택에 넣는다.
stack.push(ch);
}
}
} // 글자만큼 처리
if (!stack.isEmpty()) { //글자수만큼 돌고 스택에 남아있는 문자들을 반환해준다.
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
}
System.out.print(sb);
}// main
}// class-end
'Algorithm > BOJ' 카테고리의 다른 글
BOJ 3985 롤케이크 (0) | 2021.03.04 |
---|---|
BOJ 2798 블랙잭 (0) | 2021.03.03 |
BOJ 2941 크로아티아알파벳 (0) | 2021.03.03 |
BOJ 2999 비밀이메일 (0) | 2021.03.01 |
BOJ 11399 ATM (0) | 2021.02.17 |