Java 코딩테스트 공부/Java 백준 문제풀이

자바 백준 9935번 문제 : 문자열 폭발

daramG 2022. 11. 10. 14:43

문제 출처 : https://www.acmicpc.net/problem/9935

 

9935번: 문자열 폭발

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

www.acmicpc.net

 

문제 :

 

풀이 :

스택과 StringBuilder를 이용해 문제를 해결하였다.

그림판 등장!

소스코드 :

import java.util.*;
import java.io.*;
public class Main {
	public StringBuilder solution(String str, String boom) {
		StringBuilder sb = new StringBuilder();
		Stack<Character> stack = new Stack<>();
		char[] strChar = str.toCharArray();
		char[] boomChar = boom.toCharArray();
		for(int i=0; i<str.length(); i++) {
			stack.push(strChar[i]);
			if (stack.size() >= boom.length()) {
				int cnt = 0;
				for(int j=0; j<boom.length(); j++) {
					if (boomChar[j] != stack.get(stack.size() - boom.length() + j)) {
						cnt = 0;
						break;
					}
					cnt++;
				}
				if (cnt == boom.length()) {
					for(int k=0; k<cnt; k++) {
						stack.pop();
					}
					cnt = 0;
				}
			}
		}
		if(stack.isEmpty()) {
			sb.append("FRULA");
		}
		else for(char x : stack) sb.append(x);
		return sb;
	}
	public static void main(String[] args) throws IOException {
	    Main T = new Main();
	    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		String str = br.readLine();
		String boom = br.readLine();
		br.close();
		System.out.println(T.solution(str, boom));
		//bw.write(String.valueOf(T.solution(str, boom)));
		//bw.flush();
		//bw.close();
	}
}

 

쉬워보였는데 생각보다 오래걸렸다.

스택을 아직 잘 활용 못하겠다. 많이 연습하자