[백준 9935] 문자열 폭발(Java)

최민길(Gale)·2023년 9월 21일
1

알고리즘

목록 보기
138/172

문제 링크 : https://www.acmicpc.net/problem/9935

이 문제는 스택을 이용하여 풀 수 있습니다. 만약 스택을 사용하지 않고 일반적인 구현 방식으로 풀게 된다면 시간 초과 혹은 메모리 초과가 발생합니다. 따라서 스택에 문자를 하나씩 추가한 후 스택의 크기가 폭탄 문자열의 크기보다 크거나 같아질 경우 폭탄 문자열 개수만큼 스택을 탐색하여 모든 값이 같다면 해당 길이만큼 스택에서 pop하는 방식으로 문제를 풀 수 있습니다.

다음은 코드입니다.

import java.util.*;
import java.io.*;

class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String origin = br.readLine();
        String bomb = br.readLine();
        Stack<String> stack = new Stack<>();
        int cnt = bomb.length();

        for(int i=0;i<origin.length();i++){
            String curr = String.valueOf(origin.charAt(i));
            stack.push(curr);

            if(stack.size() >= cnt){
                boolean check = true;

                for(int j=0;j<cnt;j++){
                    if(!stack.get(stack.size()-cnt+j).equals(String.valueOf(bomb.charAt(j)))){
                        check = false;
                        break;
                    }
                }

                if(check) for(int j=0;j<cnt;j++) stack.pop();
            }
        }

        StringBuilder sb = new StringBuilder();
        if(stack.isEmpty()) System.out.println("FRULA");
        else{
            while(!stack.isEmpty()) sb.append(stack.pop());
            System.out.println(sb.reverse());
        }
    }
}

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글

관련 채용 정보