코딩테스트

BOJ : 5397

joonwoong 2024. 4. 4. 20:52

1. 문제

 

2. 풀이

좌우 스택 2개를 만들어준 뒤 밀리는 문자들을 뒤로 보내고 StringBuilder에 넣을 때에는 스택은 거꾸로 pop되기 때문에 서브로 다 몰아준 뒤 다시 반대로 pop해준다.

 

3. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Q5397_boj {
    static StringBuilder result = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Stack<String> mainStack = new Stack<>();
        Stack<String> subStack = new Stack<>();

        int N = Integer.parseInt(br.readLine());
        String str;

        for (int k = 0; k < N; k++) {
            str = br.readLine();
            String[] password = str.split("");
            for (String s : password) {
                switch (s) {
                    case "<":
                        if (!mainStack.isEmpty()) subStack.push(mainStack.pop());
                        break;
                    case ">":
                        if (!subStack.isEmpty()) mainStack.push(subStack.pop());
                        break;
                    case "-":
                        if (!mainStack.isEmpty()) mainStack.pop();
                        break;
                    default:
                        mainStack.push(s);
                }
            }
            while (!mainStack.isEmpty()) {
                subStack.push(mainStack.pop());
            }
            while (!subStack.isEmpty()) {
                result.append(subStack.pop());
            }
            result.append("\n");
        }
        System.out.println(result);
    }
}

 

4. 결과

 

5. 소감

for문으로 stringbuilder에 먼저 넣고 reverse메서드를 이용했더니 시간 초과가 나서 while문으로 스택을 이용했더니 통과되었다. 기억하도록 하겠다.

'코딩테스트' 카테고리의 다른 글

BOJ : 10799  (0) 2024.04.05
BOJ : 28278  (0) 2024.04.05
프로그래머스 : 같은 숫자는 싫어  (0) 2024.03.19
SWEA 1219 : 길찾기  (0) 2024.03.19
SWEA 1218 : 괄호 짝짓기  (0) 2024.03.11