반응형

한 줄 짜리 에디터를 만드는 문제이다.
처음에는 StringBuilder의 substring()으로 했다가… 시간이 너무 오래 걸리는 걸 깨닫고 스택 2개를 이용해서 만들었다.
그런데 이렇게 해도 이상하게 시간 초과로 계속 실패해서… 진짜 Scanner이랑 StringBuilder을 사용해서 최대한 효율적으로 만들어 봤지만 합격이 되지 않았다.
그래서 처음으로 BufferedReader와 BufferedWriter을 공부하게 되었는데… 와 진짜 확실히 빠른 듯?
package BJoon;
import java.io.*;
import java.util.Stack;
public class Editor_1406 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<Integer> stack = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
String str = br.readLine(); // br으로 읽는 방법.
String str_com;
char command;
char param;
int n = Integer.parseInt(br.readLine()); // br에는 Int를 읽는 메서드가 없어서, 문자열로 읽은 후 변환해줘야 한다.
for (char c : str.toCharArray()) {
stack.push((int)c); // 읽은 문자열을 전부 스택에 넣음
}
for (int i=0; i<n; i++) {
str_com = br.readLine();
command = str_com.charAt(0);
switch (command) {
// 우리가 사용할 곳은 stack이고, stack2는 커서를 이동하는 데에만 사용할 거다!
case 'L': // 왼쪽으로 커서를 한 칸 옮기는 경우이므로
if (!stack.isEmpty()) {
stack2.push(stack.pop()); // 맨 마지막 문자를 stack2로 옮긴다.
}
break;
case 'D': // 오른쪽으로 커서를 한 칸 옮기는 경우이므로
if (!stack2.isEmpty()) {
stack.push(stack2.pop()); // stack2에서 가지고 있던 원래의 요소를 하나 가져온다.
}
break;
case 'B': // 커서 앞의 문자를 지우는 경우이므로
if (!stack.isEmpty()) {
stack.pop(); // 어차피 커서는 stack의 맨 마지막을 가리키고 있으니까 하나만 pop해주면 된다.
}
break;
case 'P': // 커서 앞에 문자를 추가하는 경우도 'B'와 같이
param = str_com.charAt(2);
stack.push((int)param); // 커서는 stack의 맨 마지막을 가리키므로 그 상태에서 바로 push하면 된다.
// 어차피 이후의 요소들은 전부 stack2에 담겨있으니까.
break;
}
}
while (!stack.isEmpty()) { // 이제 stack에 있는 모든 요소들을
stack2.push(stack.pop()); // stack2로 옮겨준다. 흩어져있는 문자들을 하나로 합치는 과정!
}
while (!stack2.isEmpty()) {
int a = stack2.pop();
char c = (char)a;
bw.write(c); // bw를 통해 stack2에서 출력해준다.
}
// br과 bw는 사용 후에는 꼭! 닫아준다.
bw.close();
br.close();
}
}
로그인
www.acmicpc.net
작성일자: 2023-08-30
'컴퓨터 공학 > 백준' 카테고리의 다른 글
[백준] JAVA 자바 : 요세푸스 문제 (1158번) (0) | 2024.01.20 |
---|---|
[백준] JAVA 자바 : 큐 (10845번) (0) | 2024.01.20 |
[백준] JAVA 자바 : 스택 수열 (1874번) (0) | 2024.01.18 |
[백준] JAVA 자바 : 괄호 검사 (9012번) (0) | 2024.01.18 |
[백준] JAVA 자바 : 단어 뒤집기 (9093번) (0) | 2024.01.18 |