<JAVA>백준 1406 : 에디터

eunsiver·2022년 9월 5일
0

<JAVA>백준 알고리즘

목록 보기
4/11



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(System.out));
		String st = br.readLine();
		Stack<Character> stack = new Stack<>();
		StringBuilder rr = new StringBuilder();
		for (int i = 0; i < st.length(); i++) {
			stack.push(st.charAt(i));
		}
		int n = Integer.parseInt(br.readLine());

		while (n-- > 0) {
			StringTokenizer to = new StringTokenizer(br.readLine());
			String ts = to.nextToken();

			if (ts.equals("P")) {
				char e = (to.nextToken()).charAt(0);
				stack.push(e);
			} else if (ts.equals("B")) {
				if (stack.isEmpty()) {
					continue;
				} else
					stack.pop();

			} else if (ts.equals("L")) {
				if (stack.isEmpty()) {
					continue;
				} else
					rr.append(stack.pop().toString());

			} else if (ts.equals("D")) {
				if (rr.length() == 0) {
					continue;
				}

				else {

					char ra = rr.charAt(rr.length() - 1);
					stack.push(ra);
					rr.deleteCharAt(rr.length() - 1);
				}

			}
		}
		while (!stack.isEmpty()) {
			rr.append(stack.pop());
		}

		wr.write(rr.reverse().toString());
		wr.flush();

	}
}

해결 방법

  1. stack에 첫 입력 문자 저장
  2. "B"일때, 비어있지 않으면 stack.pop
  3. "P"일떼, stack.push(element)
  4. "L"일떼, 비어있지 않으면, stack.pop해서 stringBuilder에 저장
  5. "D"일때, 배열 뒤에서 하나 꺼내서 stack.push
  6. 다 끝나면 모두 pop해서 stringBuilder에 저장하고 reverse로 거꾸로 출력
profile
Let's study!

0개의 댓글