알고리즘

백준 9935번 문자열 폭발 (JAVA)

박카스마시며코딩 2023. 12. 1. 20:55

https://www.acmicpc.net/problem/9935

 

9935번: 문자열 폭발

첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모

www.acmicpc.net

 

저는 스택을 통해 문제를 해결하였습니다.

스택으로 이전의 문자들을 저장하고, 스택이 폭발 문자열의 길이보다 크다면, 위에서부터 폭발 문자열과 비교하여 같다면 스택에서 전부 빼어 문제를 풀었습니다.

 

package BOJ.etc;

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

public class BOJ_9935 {

    private static final int NOT_FOUND = -1;
    private static final String EMPTY = "FRULA";

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        String bombStr = br.readLine();
        Stack<Character> stack = new Stack<>();
        for(int i = 0 ; i < str.length() ; i++){
            char ch = str.charAt(i);
            stack.add(ch);
            if(stack.size() >= bombStr.length()){
                boolean flag = true;
                for(int j = 0 ; j < bombStr.length() ; j++){
                    if(stack.get(stack.size() - bombStr.length() + j) != bombStr.charAt(j)){
                        flag = false;
                        break;
                    }
                }
                if(!flag) {
                    continue;
                }
                for(int j = 0 ; j < bombStr.length() ; j++){
                    stack.pop();
                }
            }
        }
        if(stack.size() == 0) {
            System.out.println(EMPTY);
        }
        StringBuilder sb = new StringBuilder();
        while(!stack.isEmpty()){
            sb.append(stack.pop());
        }
        sb = sb.reverse();
        System.out.println(sb.toString());
    }
}

'알고리즘' 카테고리의 다른 글

백준 11559번 Puyo Puyo (JAVA)  (2) 2023.12.03
백준 15898번 피아의 아틀리에 (JAVA)  (1) 2023.12.02
백준 1940번 주몽 (JAVA)  (1) 2023.11.30
백준 7568번 덩치 (JAVA)  (0) 2023.11.29
백준 2343번 기타 레슨 (JAVA)  (0) 2023.11.28