ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ) 에디터
    알고리즘/백준 2020. 7. 7. 20:09
    반응형

    에디터

     

    1406번: 에디터

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

    www.acmicpc.net

    풀이

     

    총 3번을 제출했고, 마지막 한번만 맞았다.

     

    처음에 푼 방법은, ArrayList에 char를 집어넣고 커서를 ArrayList의 size로 시작해서

    LDBP를 구현했다. 풀면서 무조건 시간초과가 뜰거라고 생각했고, 9%에서 시간초과가 떴다.

     

    그래서, 위의 방법과 커서는 똑같이 가져가고 ArrayList대신 StringBuffer로 문자열을 제거, 추가했다.

    몰랐는데, StringBuffer에도 index에 값을 넣는 input 이라는 메소드가 존재했다.

    이 방법도 48%정도에서 시간초과가 떴다.

    아무래도 문자열을 제거하고 추가하는데 시간이 많이 걸릴 수 밖에 없다.

     

    마지막으로 시도한 방법은 LinkedList를 사용하는 것이다.

    Left와 Right로 나눠서 서로 값을 주고 받거나 삭제하면서 Cursor에 대한 처리 없이 진행했다.

    확실히 특정 index에 값을 끼워넣거나 삭제하는 것 없이, 끝에 있는 값에 대해서만 연산을 하면돼서 시간안에 풀 수 있는 것 같다.

     

     

    코드

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    
    public class Editor_1406 {
        public static void main(String[] args) throws IOException {
            solution(new BufferedReader(new InputStreamReader(System.in)));
        }
    
        private static void solution(BufferedReader br) throws IOException {
            final String L = "L", D = "D", B = "B";
            char[] chArr = br.readLine().toCharArray();
            LinkedList<Character> left = new LinkedList<>(), right = new LinkedList<>();
    
            for(char ch : chArr) {
                left.offer(ch);
            }
    
            int n = Integer.parseInt(br.readLine());
    
            for(int i=0; i<n; i++) {
                String input =br.readLine();
                switch (input) {
                    case L :
                        if(!left.isEmpty()) {
                            right.offer(left.pollLast());
                        }
                        break;
                    case D :
                        if(!right.isEmpty()) {
                            left.offer(right.pollLast());
                        }
                        break;
                    case B :
                        if(!left.isEmpty()) {
                            left.pollLast();
                        }
                        break;
                    default:
                        left.offer(input.charAt(2));
                        break;
                }
            }
            StringBuffer sb = new StringBuffer();
            while(!left.isEmpty()) {
                sb.append(left.poll());
            }
            while(!right.isEmpty()) {
                sb.append(right.pollLast());
            }
            System.out.println(sb.toString());
            br.close();
        }
    }
    반응형

    '알고리즘 > 백준' 카테고리의 다른 글

    BOJ) 파이프 옮기기 1  (0) 2020.07.08
    BOJ) 인구 이동  (0) 2020.07.07
    BOJ) 쉬운 계단 수  (0) 2020.07.06
    BOJ) 성곽  (0) 2020.07.06
    BOJ) 숫자판 점프  (0) 2020.07.06

    댓글

Designed by Tistory.