문제 조건

 

 

문제

 

 

입력

 

 

출력

더보기

예제 입력 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