-
반응형
에디터
풀이
총 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