🧫 문제 분석
✔️ 출처
📖 문제

문제에 나온대로 반복해서 삭제 시도 --- 메모리, 시간 초과
Stack으로 풀어보면 되지 않을까 싶어서 Stack으로 풀었다.
그리고 바로 더 좋은 방법이 있나 생각해봤는데
StringBuilder에 문자 하나씩 넣고 폭발 문자 끝단어와 현재 탐색하는 단어가 같으면
폭발 문자가 있을 가능성이 있으므로
StringBuilder.length - 폭발문자 길이 부터 끝까지를 추출해서 폭발 문자와 같은 지 확인하고 맞다면 삭제하는 식으로 하면된다.
🔅 1차 Stack 문제 풀이 (600ms)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
String str = br.readLine();
String boomStr = br.readLine();
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
stack.push(str.charAt(i));
if(stack.size() >= boomStr.length()
&& str.charAt(i) == boomStr.charAt(boomStr.length() - 1)) {
int tmp = boomStr.length();
while (tmp-->0) {
sb.append(stack.pop());
}
// 폭발 문자열이 아니면 다시 스택에 넣음
if (!sb.reverse().toString().equals(boomStr)) {
for (int j = 0; j < sb.length(); j++) {
stack.push(sb.charAt(j));
}
}
sb.delete(0, sb.length());
}
}
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
bw.write(sb.length() == 0 ? "FRULA" : sb.reverse().toString());
bw.flush();
bw.close();
}
}
🔅 2차 StringBuilder 문제 풀이 (300ms)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
String str = br.readLine();
String boomStr = br.readLine();
for (int i = 0; i < str.length(); i++) {
sb.append(str.charAt(i));
if(sb.length() >= boomStr.length()
&& str.charAt(i) == boomStr.charAt(boomStr.length() - 1)) {
int range = sb.length() - boomStr.length();
if (sb.substring(range).equals(boomStr)) {
sb.delete(range, sb.length());
}
}
}
bw.write(sb.length() == 0 ? "FRULA" : sb.toString());
bw.flush();
bw.close();
}
}
❗ 오답노트 / 필요한 지식
- 일단 문제를 어떻게든 풀고 다른 방법은 없는지 리팩토링할 수 있는지 고민하는 건 잘 하고 있는 것 같다.
'baekjoon > String' 카테고리의 다른 글
백준 2179번 : 비슷한 단어 [자바] (0) | 2025.03.14 |
---|---|
백준 20437번 : 문자열 게임 2 [자바] (0) | 2025.03.09 |
백준 4659번 : 비밀번호 발음하기 [자바] (0) | 2025.03.06 |
백준 1036번 : 36진수 자바 (2) | 2024.08.28 |
백준 5525번 : IOIOI 자바 (0) | 2024.08.24 |