기록하는 개발자

[백준][JAVA] 9935 : 문자열 폭발 본문

Algorithm

[백준][JAVA] 9935 : 문자열 폭발

밍맹030 2021. 9. 11. 14:23
728x90

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

 

9935번: 문자열 폭발

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

www.acmicpc.net

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String origin = br.readLine();
        String explo = br.readLine();
        Stack<Character> stack = new Stack<Character>();

        //초기 문자열의 가장 마지막부터 stack에 push 한다.
        for(int i=origin.length()-1; i>-1; i--) {
            stack.push(origin.charAt(i));
            if(stack.size()>=explo.length()&&stack.peek()==explo.charAt(0)){
            //stack의 크기가 폭탄 문자열 크기 이상, stack의 top과 폭탄 문자열의 첫 글자가 같은 경우
                boolean flag = true;
                for(int j=1; j<explo.length(); j++) {
                //top이 같은 것을 위에서 확인했으므로 그 다음 문자부터 확인한다.
                    if(stack.get(stack.size()-j-1) != explo.charAt(j)) {
                        flag = false;
                        break;
                    }
                }
                if(flag) { //폭탄 문자열이 있는 경우 폭탄 문자열의 길이 만큼 pop 연산 실행
                    for(int j=0; j<explo.length(); j++)
                        stack.pop();
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        int size=stack.size();
        if(stack.isEmpty()) System.out.println("FRULA");
        else {
            while (size-- > 0)
                sb.append(stack.pop());
        }
        System.out.println(sb);
    }
}

 

728x90

'Algorithm' 카테고리의 다른 글

[백준][JAVA] 1697 : 숨바꼭질  (0) 2021.10.07
[백준][JAVA] 7576 : 토마토  (0) 2021.10.06
[백준][JAVA] 2230 : 수 고르기  (0) 2021.08.24
[백준][JAVA] 2178 : 미로 탐색  (0) 2021.08.14
[백준][JAVA] 2579: 계단 오르기  (0) 2021.08.14