코딩문제풀이/Baekjoon

[Java] 백준 9935번 : 문자열 폭발

코딩하는 포메라니안 2022. 5. 6. 01:02

1. 문제

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

 

9935번: 문자열 폭발

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

www.acmicpc.net

 

 

 

2. 풀이 과정

StringBuilder객체인 sb에 결과 문자열을 담았다.

 

실행 과정은 아래 2단계로 정리할 수 있다.

1) (sb길이 >= 폭발시킬 문자열 길이) & (방금 읽은 문자 == 폭발시킬 문자열의 마지막 문자)이면, 검사 시작

2) sb의 뒤에서 폭발시킬 문자열 길이만큼 잘라서 비교 => 같으면 자르기

 

폭발시킬 문자열 내에 반복되는 구간이 있다면 KMP를 쓰는 게 빠를 것 같지만, 이 문제엔 반복이 없다고 해서 pass

 

import java.io.*;

public class Boj9935 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		char s1[] = br.readLine().toCharArray();//주어진 문자열
		String bomb = br.readLine();
		char s2[] = bomb.toCharArray();//폭발시킬 문자열
		int len = s2.length;
		StringBuilder sb = new StringBuilder();
		
		for(int i=0, size=s1.length; i<size; i++) {
			sb.append(s1[i]);
			int sbLen = sb.length();
			if(sbLen>=len && s1[i]==s2[len-1]) {
				String s = sb.substring(sbLen-len, sbLen);
				if(s.equals(bomb)) {
					sb.setLength(sb.length()-len);//자르기
				}
			}	
		}
		
		if(sb.length()==0) { System.out.print("FRULA");}
		else {System.out.print(sb.toString());}
	}
}