본문 바로가기
백준

백준 9935번 : 문자열 폭발

by Huiyeong 2021. 7. 5.

 문제

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

 

9935번: 문자열 폭발

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

www.acmicpc.net

9935 문자열 폭발

 

 구현 방법

 

처음에는 스택을 안쓰고 while문을 돌려 처음부터 끝까지 계속 체크를 했습니다.

당연히 시간초과🥶

스택으로 다시 설계하였습니다.

 

 구현 코드

package BOJ.Gold;

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

public class BOJ9935_문자열폭발 {
	static String input, search;
	static Stack<Character> stack, temp;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		input = br.readLine();
		search = br.readLine();
		stack = new Stack<>();
		temp = new Stack<>();
		for (int i=0;i<input.length();i++) {
			stack.add(input.charAt(i));
			if (temp.size()>0) temp.clear();
			if (stack.peek()==search.charAt(search.length()-1) && stack.size()>=search.length()){ // 남은 사이즈가 검색 문자 크기보다 클 때만 탐색
				for (int j=search.length()-1;j>=0;j--) {
					char now = stack.pop();
					temp.add(now); // 만약 틀렸을 때 순서대로 stack에 넣어주기 위한 temp 스택
					if (now!=search.charAt(j)) {
						while(!temp.isEmpty()) {
							stack.add(temp.pop());
						}
					}
				}
			}
		}
		if (stack.size()>0) {
			while(!stack.isEmpty()) sb.append(stack.pop());
			System.out.println(sb.reverse());
		} else System.out.println("FRULA");
	}
}

 

정답!

'백준' 카테고리의 다른 글

백준 5014번 : 스타트링크  (0) 2021.07.07
백준 9081번 : 단어 맞추기  (0) 2021.07.06
백준 14442번 : 벽 부수고 이동하기 2  (0) 2021.04.10
백준 2206번 : 벽 부수고 이동하기  (0) 2021.04.09
백준 16953번 : A -> B  (0) 2021.04.09