publicclassMain{ publicstaticvoidmain(String[] args)throws IOException{ var bf = new BufferedReader(new InputStreamReader(System.in)); char[] charArr = (bf.readLine()).toCharArray(); //List list = Arrays.asList(charArr); //var wordStk = new ArrayList<Character>(Arrays.asList(charArr)); var wordStk = new ArrayList<Character>(); var testCase = Integer.parseInt(bf.readLine()); var tmpStk = new ArrayList<Character>(); for (char c : charArr) wordStk.add(c); for (int i = 0 ; i < testCase ; i++){ var cmdLine = new StringTokenizer(bf.readLine()); var cmd = cmdLine.nextToken(); if (cmd.equals("P")){ wordStk.add(cmdLine.nextToken().charAt(0)); } elseif (cmd.equals("L")){ if (wordStk.size() != 0){ tmpStk.add(wordStk.get(wordStk.size()-1)); wordStk.remove(wordStk.size()-1); } } elseif (cmd.equals("D")){ if (tmpStk.size() != 0){ wordStk.add(tmpStk.get(tmpStk.size()-1)); tmpStk.remove(tmpStk.size()-1); } } elseif (cmd.equals("B")){ if (wordStk.size() != 0){ wordStk.remove(wordStk.size()-1); } } } for (char c : wordStk) System.out.print(c); for (char c : tmpStk) System.out.print(c); } }
문제점들…
근데 문제가 있다. Arrays.asList(char[])가 작동을 안한다… asList가 배열이나, 가변인자를 받기 때문이다.
가변인자란 여러 인자를 받으면, 이를 배열로 만들어서 인자로 활용하는 개념이다. 즉 asList에 기본값을 가진 배열이 오면, List<\char[]>이 온다..! (다르게 말하자면, 오토박싱이 이뤄지지 않는다. 개별의 값만 오토박싱한다.) 그래서 기본값을 가진 배열은 asList로 다룰수 없다.(래퍼클래스 배열만 가능)
그리고 출력할 때도 문제가 있다. 무지성으로 여러번 출력하는 거보다 한방에 모아서 출력하는게(StringBuffer) 훨씬 속도가 빠르다!
그리고 나는 자바에 스택이 있는 걸 깜빡하고 arrayList로 작성했는데, 다시 찾아보니 스택을 지원했다. 그래서 스택으로 고쳐 써봤다.
publicclassMain{ publicstaticvoidmain(String[] args)throws IOException{ var bf = new BufferedReader(new InputStreamReader(System.in)); var sb = new StringBuilder(); var charArr = bf.readLine().toCharArray(); var wordStk = new Stack<Character>(); var testCase = Integer.parseInt(bf.readLine()); var tmpStk = new Stack<Character>(); for (char c : charArr) wordStk.add(c); for (int i = 0 ; i < testCase ; i++){ var cmdLine = new StringTokenizer(bf.readLine()); var cmd = cmdLine.nextToken(); if (cmd.equals("P")){ wordStk.push(cmdLine.nextToken().charAt(0)); } elseif (cmd.equals("D")){ if (tmpStk.size() != 0){ wordStk.push(tmpStk.pop()); } } elseif (wordStk.size()==0) continue; elseif (cmd.equals("L")){ tmpStk.push(wordStk.pop()); } elseif (cmd.equals("B")){ wordStk.pop(); } } for (char c : wordStk) sb.append(c); while(!tmpStk.isEmpty()) sb.append(tmpStk.pop()); System.out.println(sb); } }