본문 바로가기

코딩테스트/JAVA

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

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

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

public class Main {
	public static int bLength;
	public static String str, bomb;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		// 1. 입력받기
		str = br.readLine();
		bomb = br.readLine();
		bLength = bomb.length();
		
		// 2. 스택에 하나씩 넣으며 폭발 문자열 비교하기
		Stack<Character> st = new Stack<Character>();
		for(int i=0;i<str.length();i++) {
			st.push(str.charAt(i));
			
			// 2-1. 폭발 문자열 길이보다 커졌다면
			if(st.size() >= bLength) {
				boolean chk = false;
				
				// 3. st.size - bLength 부터 st.size까지 탐색
				for(int j = 0;j<bLength;j++) {
					if(st.get(st.size()-bLength+j) != bomb.charAt(j)) {
						chk = true;
						break;
					}
				}
				
				// 3-1. 문자열이 전부 일치한다면 제거
				if(!chk) {
					for(int j = 0;j<bLength; j++) {
						st.pop();
					}
				}
			}
		}

		// 4. 출력하기
		if (st.size() == 0) {
			sb.append("FRULA");
		} else {
			for(Character c : st) {
				sb.append(c);
			}
		}
		System.out.println(sb);
	}
}

 

 

## 풀이 사항
풀이 일자: 2024.10.13
풀이 시간: 1시간 30분
채점 결과: 정답
예상 문제 유형: 문자열, 자료구조
시간: 460 ms
메모리: 62352kb

풀이 방법
1. 스택에 문자열을 하나씩 집어 넣으면서 문자열을 비교해주고 같으면 스택에서 제거한다.
2. 마지막까지 스택에 남은 문자열이 있으면 출력해주고 아니면 FRULA를 출력한다.
3. 문제 자체는 크게 어렵지 않았지만 스택을 활용해서 풀이해야한다는점, get 메서드를 잘 사용하는것이 어려웠던것같다.

'코딩테스트 > JAVA' 카테고리의 다른 글

[백준 JAVA] 17281번: ⚾  (1) 2024.10.18
[백준 JAVA] 9370번: 미확인 도착지  (0) 2024.10.16
[백준 JAVA] 12100번: 2048 (Easy)  (0) 2024.10.11
[백준 JAVA] 17143번: 낚시왕  (2) 2024.10.10
[백준 JAVA] 14890번: 경사로  (0) 2024.10.10