-
백준 1406번 에디터 문제 Stack 활용 풀이 ( Java )Problem Solving/Java 2019. 9. 5. 15:46반응형
처음엔 ArrayList를 활용해서 풀었다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889import java.io.*;import java.util.ArrayList;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// reader 생성BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));// writer 생성ArrayList<Character> list = new ArrayList<Character>();// list 생성String input = br.readLine();// String 입력받음int cursor = input.length();// 커서 위치int max = input.length();// 오른쪽 끝 위치for (int i = 0; i < max; i++) {list.add(input.charAt(i));}// 리스트에 글자 담음String nStr = br.readLine();int n = Integer.parseInt(nStr);// 첫 라인을 읽고// 첫 라인에서 입력받은 라인만큼 반복for (int i = 0; i < n; i++) {String command = br.readLine();// 명령어 입력 받음if (command.startsWith("L")) {// 커서가 맨 왼쪽이 아니면if (cursor > 0) {// 왼쪽으로 이동cursor--;}} else if (command.startsWith("D")) {// 커서가 맨 오른쪽이 아니면if (cursor < max) {// 오른쪽으로 이동cursor++;}} else if (command.startsWith("B")) {// 커서가 맨 왼쪽이 아니면if (cursor > 0) {// 왼쪽 글자 삭제list.remove(--cursor);// 글자수도 하나 감소max--;}} else if (command.startsWith("P")) {String[] pCommand = command.split(" ");// 커서 위치에 $ 입력list.add(cursor, pCommand[1].toCharArray()[0]);// 커서, 최대값 증가cursor++;max++;}}// sb에 더해서StringBuilder sb = new StringBuilder("");for (char c : list) {sb.append(c);}// 출력bw.write(sb.toString());br.close();bw.flush();bw.close();// reader와 writer를 닫는다}}이클립스에서 잘 작동하길래 백준에 제출해봤는데
시간초과가 떴다.
멘붕..
내 머리속에 떠오르던 유일한 방법이었기에
혼자 풀기를 포기하고 강의를 들었더니 Stack을 활용해 풀 수 있었다
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182import java.io.*;import java.util.Stack;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// reader 생성BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));// writer 생성Stack<Character> lStack = new Stack<Character>();Stack<Character> rStack = new Stack<Character>();// 스택 생성String input = br.readLine();for (int i = 0; i < input.length(); i++) {lStack.push(input.charAt(i));}// 왼쪽 스택에 리스트에 글자 담음String nStr = br.readLine();int n = Integer.parseInt(nStr);// 첫 라인을 읽고// 첫 라인에서 입력받은 라인만큼 반복for (int i = 0; i < n; i++) {String command = br.readLine();// 명령어 입력 받음// 왼쪽이동if (command.startsWith("L")) {// 커서가 맨 왼쪽이 아니면if(!lStack.empty()) {rStack.push(lStack.pop());}// 오른쪽 이동} else if (command.startsWith("D")) {// 커서가 맨 오른쪽이 아니면if(!rStack.empty()) {lStack.push(rStack.pop());}// 커서 왼쪽 문자 삭제} else if (command.startsWith("B")) {// 커서가 맨 왼쪽이 아니면if(!lStack.empty()) {lStack.pop();}// 커서 왼쪽 문자 추가} else if (command.startsWith("P")) {String[] pCommand = command.split(" ");lStack.push(pCommand[1].toCharArray()[0]);}}// lStack이 빌때까지 오른쪽 스택으로 옮기고while(!lStack.empty()) {rStack.push(lStack.pop());}// rStack이 빌때까지while(!rStack.empty()) {//출력bw.write(rStack.pop());}br.close();bw.flush();bw.close();// reader와 writer를 닫는다}}생각도 못했던 방법인데 너무 쉽게 풀 수 있어서 당황.
최백준 갓갓준..
반응형'Problem Solving > Java' 카테고리의 다른 글
백준 17413 단어 뒤집기2 문제 풀이 Stack 활용 ( Java ) (0) 2019.10.19 백준 1158번 조세퍼스 문제 큐 활용 풀이 ( Java ) (0) 2019.09.05 백준 1874번 스택 수열 문제 풀이 Stack 활용 ( Java ) (0) 2019.09.05 백준 9012번 괄호 문제 풀이 Stack 활용 ( Java ) (0) 2019.09.05 백준 9093 단어 뒤집기 문제 풀이 Stack 활용 ( Java ) (0) 2019.09.04