Algorithm

[백준] 문자열 폭발 java

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String origin = br.readLine();
        String bomb = br.readLine();

        Stack<Character> stack = new Stack<>();

        for (int i = 0; i < origin.length(); i++) {
            stack.push(origin.charAt(i)); // stack에 문자를 하나씩 삽입한다.

            if (stack.size() >= bomb.length()) { // bomb보다 stack에 포함된 문자열의 길이가 길다면,
                boolean hasBomb = true;
                for (int j = 0; j < bomb.length(); j++) {
                    // stack에 포함된 맨 뒤 bomb 자릿수만큼 bomb 문자열과 동일한지 확인한다.
                    if (stack.get(stack.size() - bomb.length() + j) != bomb.charAt(j)) {
                        hasBomb = false; 
                        break; // 동일하지 않은 것이 하나라도 있다면 루프를 빠져나온다.
                    }
                }
                // bomb와 동일하다면 해당 문자열을 stack에서 빼낸다.
                if (hasBomb) {
                    IntStream.range(0, bomb.length()).forEach(j -> stack.pop());
                }
            }
        }
        StringBuilder answer = new StringBuilder();
        for (char c : stack) {
            answer.append(c);
        }
        System.out.println(answer.length() > 0 ? answer.toString() : "FRULA");
    }
}

 

그나저나 백준 Java로 처음 풀어보는데.. class 이름이 Main이 아니면 런타임 에러가 발생한다. ㅎ핫