문제: 백준 1406 에디터
풀이
처음에 ArrayList로 풀었다가.. 시간초과가 나오고.. 다시 LinkedList로 바꿧지만 역시 시간초과로 결국 Stack를 이용하여 풀었더니 드디어 통과 되었다. 스택 2개를 이용해서 풀건데 lStack에는 커서의 왼쪽값들을 넣어줄거고 rStack에는 커서의 오른쪽 값들을 넣어줄거다.
- 초기에 입력받은 값들은 커서의 왼쪽에 있기때문에 lStack에 넣어준다.
- 입력받은 테스트 횟수만큼 반복할건데 L,D,B,P에 따라 if문을 추가한다.
- 스택은 FILO구조를 갖고 있기때문에 커서의 왼쪽값인 lStack의 값들을 rStack에 담아준다.
- rStack에 있는 값을 꺼내면서 출력한다.
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Stack<Character> lStack = new Stack();
Stack<Character> rStack = new Stack();
String str = br.readLine();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < str.length(); i++) {
lStack.push(str.charAt(i));
}
while (N-- > 0) {
String command = br.readLine();
if (command.charAt(0) == 'L' && !lStack.empty()) {
rStack.push(lStack.pop());
} else if (command.charAt(0) == 'D' && !rStack.empty()) {
lStack.push(rStack.pop());
} else if (command.charAt(0) == 'B' && !lStack.empty()) {
lStack.pop();
} else if (command.charAt(0) == 'P') {
lStack.push(command.charAt(2));
}
}
while(!lStack.empty()){
rStack.push(lStack.pop());
}
while(!rStack.empty()){
sb.append(rStack.pop());
}
System.out.println(sb);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 1912 - 연속합 (0) | 2022.06.20 |
---|---|
[Java] 백준 11053 - 가장 긴 증가하는 부분 수열 (0) | 2022.06.17 |
[Java] 백준 11726 - 2×n 타일링 (0) | 2022.06.07 |
[Java] 백준 1935 - 후위표기식2 (0) | 2022.05.24 |
[Java] 백준 9093-단어 뒤집기 (0) | 2022.05.13 |