Record
BAEK1406. 에디터 본문
2023년 6월 25일
https://www.acmicpc.net/problem/1406
시간 : ❤❤❤❤❤
만족도 : ❤❤❤❤❤
아까 풀었던 키로거 문제와 같은 유형의 문제이다.
옛날에 풀었을 때 틀렸었던 문제였다.
그 당시 코드를 보니 ArrayList 자료 구조를 사용했는데,
아마 지금은 Stack을 사용해서 Stack 에 element를 삽입하고 삭제할 때 시간 복잡도가 O(1)이므로 시간초과 됐던 문제를 해결할 수 있었다.
앞으로 있을 모든 코딩테스트 및 꼭 취득하고 싶은 B형 역량테스트에 있어서 어떤 자료구조의 시간 복잡도가 어떤지 잘 파악하고 활용할 수 있는 것이 중요하다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; import java.util.StringTokenizer; public class BAEK1406 { static Stack<Character> stack, temp; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; String str = br.readLine(); StringBuilder sb = new StringBuilder(); stack = new Stack<>(); temp = new Stack<>(); for (int i = 0; i < str.length(); i++) { stack.add(str.charAt(i)); } int N = Integer.parseInt(br.readLine()); for (int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine()); String order = st.nextToken(); switch (order) { // 왼쪽 키보드를 눌렀을 때, stack에서 temp로 한 개 옮긴다. case "L": if (!stack.isEmpty()) { temp.add(stack.pop()); } break; // 오른쪽 키보드를 눌렀을 때, temp에서 stack으로 한 개 옮긴다. case "D": if (!temp.isEmpty()) { stack.add(temp.pop()); } break; // 백스페이스를 눌렀을 때, stack에서 한 개 제거한다. case "B": if (!stack.isEmpty()) stack.pop(); break; // 문자, 숫자를 눌렀을 때, stack에 삽입한다. default: String s = st.nextToken(); stack.add(s.charAt(0)); break; } } // temp로 옮긴 것들을 다 stack으로 옮겨준다. while(!temp.isEmpty()) { stack.add(temp.pop()); } // 비밀번호만 담긴 stack에서 StringBuilder에 넣어준다. while(!stack.isEmpty()) { sb.append(stack.pop()); } // 현재는 비밀번호가 거꾸로 뒤집어져 있으므로 반대로 뒤집어준다. sb.reverse(); // 출력한 후에, sb를 초기화 시킨다. System.out.println(sb.toString()); } }
'Algorithm > BOJ' 카테고리의 다른 글
BAEK3986. 좋은 단어 (0) | 2023.06.26 |
---|---|
BAEK10799. 쇠막대기 (0) | 2023.06.25 |
BAEK5397. 키로거 (0) | 2023.06.24 |
BAEK16236. 아기 상어 (0) | 2023.06.23 |
BAEK9370. 미확인 도착지 (0) | 2023.06.22 |
Comments