문제
상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다.
폭발은 다음과 같은 과정으로 진행된다.
- 문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다.
- 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다.
- 폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다.
상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다.
폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다.
입력
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다.
둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다.
두 문자열은 모두 알파벳 소문자와 대문자, 숫자 0, 1, ..., 9로만 이루어져 있다.
출력
첫째 줄에 모든 폭발이 끝난 후 남은 문자열을 출력한다.
예제
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main_BJ_9935_문자열폭발 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Stack<Character> stack = new Stack<>();
String str = br.readLine();
String bomb = br.readLine();
for(int i=str.length()-1;i>=0;i--) {
stack.push(str.charAt(i));
if(stack.size()>=bomb.length() && stack.peek()==bomb.charAt(0)) {
boolean check = true;
for(int j=1; j<bomb.length(); j++) {
if(stack.get(stack.size()-j-1) != bomb.charAt(j)) {
check = false;
break;
}
}
if(check) {
for(int j=0; j<bomb.length(); j++)
stack.pop();
}
}
}
if(stack.isEmpty()) System.out.println("FRULA");
else {
while(!stack.isEmpty()) {
sb.append(stack.pop());
} System.out.println(sb.toString());
}
}
}
|
cs |
구현 방법
처음에는 replace()를 사용하여 구현해봤더니 계속 메모리 초과가 발생했습니다. 그래서 출력 방식도 StringBuilder로 변경해서 제출해봤지만 똑같이 메모리 초과가 발생해서 스택을 이용해서 구현했습니다.
입력받은 문자열 끝에서부터 스택에 넣으면서 bomb과 문자가 동일하면 스택에 있는 값을 pop() 해주었습니다. 입력받은 문자열을 다 확인한 후, 마지막에 스택이 비어있으면 FRULA를 출력 해주고 아닐 경우에는 스택에 있는 값을 pop()해 출력해 주었습니다.
'문제 > 백준' 카테고리의 다른 글
백준 11724번 연결 요소의 개수 [JAVA] (1) | 2021.03.12 |
---|---|
백준 7576 토마토 [JAVA] (0) | 2021.03.12 |
백준 1021번 회전하는 큐 [Java] (0) | 2021.03.07 |
백준 2075번 N번째 큰 수 [Java] (0) | 2021.03.07 |
백준 7662번 이중 우선순위 큐 [Java] (0) | 2021.03.07 |