백준_5397_키로거

덤벨로퍼·2024년 3월 5일
0

코테

목록 보기
29/37

https://www.acmicpc.net/problem/5397

두 개의 Stack(key, delete)을 사용하여 풀이하였다. 이유는 두가지이다.

'-' : keyStack에 가장 최근에 들어간 문자열을 삭제해줘야함. (LIFO)
'<' or '>' : 커서 위치 변경은 삽입 순서가 바뀌는 것이다.
'<'을 할 때 left에 가장 최근에 들어간 문자열을 right에 저장해준다.
'>'을 할 때는 right 있는 문자열을 꺼내준다음 left에 넣어준다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {
	static int T;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		T = Integer.parseInt(br.readLine());

		for (int t = 0; t < T; t++) {
			String str = br.readLine();
			Stack<Character> left = new Stack<>();
			Stack<Character> right = new Stack<>();

			for (int i = 0; i < str.length(); i++) {
				char c = str.charAt(i);

				switch (c) {
					case '<':
						if (!left.isEmpty()) {
							right.push(left.pop());
						}
						break;
					case '>':
						if (!right.isEmpty()) {
							left.push(right.pop());
						}
						break;
					case '-':
						if (!left.isEmpty()) {
							left.pop();
						}
						break;
					default:
						left.push(c);
						break;
				}
			}

			StringBuilder sb = new StringBuilder();
			while (!left.isEmpty()) {
				right.push(left.pop());
			}
			while (!right.isEmpty()) {
				sb.append(right.pop());
			}

			System.out.println(sb);
		}
	}
}
profile
💪 점진적 과부하로 성장하는 개발자

0개의 댓글