[java] 9935 문자열 폭발

ideal dev·2023년 1월 10일
0

코딩테스트

목록 보기
47/69

1. 문제 링크 및 문제

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

2. 해결 방법 생각해보자 ...

  1. 빈 문자열을 생성하여, 문제에서 주어진 문자열의 첫번째 자리부터 하나씩 추가한다.
  2. 추가하다가 폭발문자열 길이와 같거나 클 때, 문자열(문자열길이 - 폭발문자열길이, 문자열길이),폭발문자열과 비교한다.
  3. 같으면 폭발문자열길이만큼 빼주고, 다르면 그대로 둔다.
    = 문자열.삭제(문자열길이-폭발문자열,문자열길이)
  • 백준예시 1 로 이해
    문자열 : mirkovC4nizCC44, 폭발문자열 : C4
    1.문제에서 주어진 문자열의 첫번째 자리부터 하나씩 추가한다.
    m
  1. 추가하다가 폭발문자열 길이와 같거나 클 때, 폭발문자열과 비교한다. mi == C4 아니므로 패스
    mi
    mir
    mirk
    mirko
    mirkov
    mirkovC
    문자열(문자열길이 - 폭발문자열길이, 문자열길이),폭발문자열 이므로,
    mirkovC4
    문자열.삭제(문자열길이-폭발문자열,문자열길이)
    mirkovn
    mirkovni
    mirkovniz
    mirkovnizC
    mirkovnizCC
    mirkovnizCC4
    mirkovnizC4
    mirkovniz

3. 코드

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


 
public class Main {
    static String origin;
    static String bomb;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        origin = br.readLine();
        bomb = br.readLine();
        
        int oriLen = origin.length();
        int bombLen = bomb.length();
        StringBuilder sb = new StringBuilder();

        for(int i=0;i<oriLen;i++){
            sb.append(origin.charAt(i));
            
            if(sb.length() < bombLen ) continue;
            boolean isSame = true;
            for(int j=0;j<bombLen;j++){
                if(sb.charAt(sb.length()-bombLen+j) != bomb.charAt(j)) {
                    isSame = false;
                    break;
                }
            }
            if(isSame) sb.delete(sb.length()-bombLen, sb.length());
        }
        if(sb.length() == 0)  System.out.println("FRULA"); 
        else System.out.println(sb.toString());
    }
}

0개의 댓글