알고리즘

[백준]9935_문자열폭발_Stack

Lahezy 2022. 9. 25.
728x90

[문제 링크]

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

 

9935번: 문자열 폭발

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

www.acmicpc.net

 

[생각 흐름]

처음에는 자바에서 제공하는 replace를 반복하려 했으나 시간 초과 문제가 있다고 하여 스택으로 변경하였다

폭발하는 문자열의 마지막 문자열의 마지막 문자를 저장해 두고 그것과 같은 문자가 들어오는 경우 스택을 확인하는 방식으로 알고리즘을 

구현하였다 

푸는 중 2%에서 계속 메모리 초과 오류가 발생했는데 StringBuilder 클래스를 사용하여 마지막 스택에 있는 문자를 모두 출력하니까

문제가 해결되었다. 

 

[코드]

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

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

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

        String bomb = br.readLine();

        int bomblen = bomb.length();
        char last = bomb.charAt(bomblen-1);

        for(int i=0;i<input.length();i++){
            char c = input.charAt(i);
            s.push(c);

            if(c==last && bomblen<=s.size()){
                boolean f = true;
                for(int j=0;j<bomblen;j++){
                    if(s.get(s.size()-j-1)== bomb.charAt(bomblen-j-1))continue;
                    else {
                        f=false;
                        break;
                    }
                }
                if(f){
                    for(int j=0;j<bomblen;j++) s.pop();
                }
            }
            //System.out.println(Arrays.toString(s.toArray()));
        }

        StringBuilder ans= new StringBuilder();
        for(Character c : s){
            ans.append(c);
        }
        ans = (ans.length()==0)?ans.append("FRULA"):ans;
        System.out.println(ans);

    }
}
728x90

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

[백준]10830_행렬 제곱_분할  (0) 2022.09.27
[백준]14503_로봇청소기  (0) 2022.09.26
[백준]9465_스티커_dp  (0) 2022.09.25
[Programmers]합승 택시 요금  (1) 2022.09.23
[Programmers] 프렌즈4블록  (0) 2022.09.20

댓글