[Baekjoon] 9935번: 문자열 폭발
2023. 3. 17. 23:42ㆍComputer Sciences/Problem Solve
https://www.acmicpc.net/problem/9935
문제 설명
먼저 문자열 한 줄이 주어진다. 그 다음 폭발 키워드 문자열이 주어진다. 만약 문자열에 폭발 키워드 문자열이 있으면 해당 문자열이 폭발하고 앞 뒤 문자열은 합쳐진다. 이때 폭발이 모두 끝난 후 남은 문자열을 출력하면 된다. 만약 남은 문자열이 없는 경우, 즉 모든 문자열이 폭발한 경우 FRULA를 출력한다.
스택이나 StringBuilder를 활용하면 효율적으로 해결할 수 있다.
풀이 방법 1. StringBuilder
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String bomb = br.readLine();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char cur = str.charAt(i);
sb.append(cur);
if (sb.length() >= bomb.length()) {
boolean isExplode = true;
for (int j = 0; j < bomb.length(); j++) {
char ch1 = sb.charAt(sb.length() - bomb.length() + j);
char ch2 = bomb.charAt(j);
if (ch1 != ch2) {
isExplode = false;
break;
}
}
if (isExplode) {
sb.delete(sb.length() - bomb.length(), sb.length());
}
}
}
System.out.print(sb.length() == 0 ? "FRULA" : sb);
}
}
풀이 방법 2. Stack
import java.io.*;
import java.util.Stack;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String bomb = br.readLine();
Stack<Character> s = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char cur = str.charAt(i);
s.push(cur);
if (s.size() >= bomb.length()) {
boolean isExplode = true;
for (int j = 0; j < bomb.length(); j++) {
char ch1 = s.get(s.size() - bomb.length() + j);
char ch2 = bomb.charAt(j);
if (ch1 != ch2) {
isExplode = false;
break;
}
}
if (isExplode) {
for (int j = 0; j < bomb.length(); j++) s.pop();
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.size(); i++) sb.append(s.get(i));
System.out.print(sb.length() == 0 ? "FRULA" : sb);
}
}
성능은 StringBuilder가 더 좋았다.
'Computer Sciences > Problem Solve' 카테고리의 다른 글
[Baekjoon] 2108번: 통계학 (0) | 2023.03.20 |
---|---|
[Baekjoon] 2309번: 일곱 난쟁이 (0) | 2023.03.18 |
[Baekjoon] 1967번: 트리의 지름 (0) | 2023.03.16 |
[Baekjoon] 10814번: 나이순 정렬 (0) | 2023.03.15 |
[Baekjoon] 11650번: 좌표 정렬하기 (0) | 2023.03.15 |