Cooper's devlog

에디터:1406번 - JAVA 본문

Algorithm/Baekjoon

에디터:1406번 - JAVA

cooper_dev 2020. 7. 8. 16:54

1. 문제 링크

https://www.acmicpc.net/problem/1406

 

1406번: 에디터

문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는

www.acmicpc.net

 

 


2. 문제 설명

 

 

 


3. 문제 접근법

  1. 왼쪽 스택(lstack), 오른쪽 스택(rstack)을 선언한다.
  2. 입력된 문자를 모두 왼쪽 스택에(lstack)에 추가한다.
  3. 입력값에 따라 다르게 처리한다
    • 'L' -> 오른쪽 스택의 가장 위에 값을 왼쪽 스택에(rstack -> lstack)에 이동한다.
    • 'D' -> 왼쪽 스택의 가장 위의 값을 오른쪽 스택에(lstack -> rstack )에 이동한다. 
    • 'B' -> 왼쪽 스택에 있는 값을 제거한다.
    • 'P $' -> 왼쪽 스택에 $을 추가한다.

 


4. 문제 풀이

 

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package data_structure1;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
 
public class editor_stack {
    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<Character> lStack = new Stack<>();
        Stack<Character> rStack = new Stack<>();        
        
        
        String str = br.readLine();
        int command_num = Integer.parseInt(br.readLine());
 
        for (int i = 0; i < str.length(); i++)    lStack.push(str.charAt(i));
        
        for (int i = 1; i <= command_num; i++) {
            String command = br.readLine();
            
            if(command.startsWith("L")) {
                if(!lStack.empty()) {
                    rStack.push(lStack.pop());
                }
            }
            
            if(command.startsWith("D")) {
                if(!rStack.empty()) {
                    lStack.push(rStack.pop());
                }
            }
            
            if(command.startsWith("B")) {
                if(!lStack.empty()) {
                    lStack.pop();
                }
            }
            
            if(command.startsWith("P")) {
                String[] pCommand = command.split(" ");
                lStack.push(pCommand[1].toCharArray()[0]);
            }
        }
         
        while(!lStack.empty()) {
            rStack.push(lStack.pop());
        }
 
        while(!rStack.empty()) {
            bw.write(rStack.pop());
        }
 
        br.close();
        bw.flush();
        bw.close();
    }
}
 
 

 


5. 개선점 또는 트러블 슈팅

기존의 풀이: 입력 값의 위치 기반 인덱스로 문제 접근했는데, 생각보다 까다로워서 골머리가 아팠다.

하지만, stack으로 접근 시, 훨씬 논리가 깔끔하고 가독성도 좋은 코드로 접근 가능하다.

'Algorithm > Baekjoon' 카테고리의 다른 글

단어 뒤집기 :17413번 - JAVA  (0) 2020.07.09
조세퍼스 문제 : 1158번 - JAVA  (0) 2020.07.08
스택수열 : 1874번 - JAVA  (0) 2020.07.07
괄호 : 9012번 - JAVA  (0) 2020.07.07
단어 뒤집기 : 9093번 - JAVA  (0) 2020.07.06
Comments