기록하는 블로그

백준 5397 - 키로거 본문

알고리즘 문제 풀이/자료구조

백준 5397 - 키로거

KGS 2021. 11. 15. 21:24
728x90

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

 

5397번: 키로거

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입

www.acmicpc.net

★ 풀이

예전에 비슷한 형식의 문제를 풀어본 경험이 있어 빠르게 풀 수 있었다.

 

stack 2개를 만들고 각각 커서의 왼쪽과 오른쪽에 있는 수들로 상정하고 구현하면 쉽게 풀 수 있다.

 

★ 소스 코드

import java.io.*;
import java.util.*;

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    public static void main(String[] args) throws IOException {
    	int T = Integer.parseInt(br.readLine());
    	while(T-->0) {
    		String input = br.readLine();
    		Stack<Character> left = new Stack<Character>();
    		Stack<Character> right = new Stack<Character>();
    		for(int i = 0; i<input.length(); i++) {
    			char cmd = input.charAt(i);
    			if(cmd == '>') {
    				if(!right.isEmpty()) {
    					left.add(right.pop());
    				}
    			}else if(cmd == '<') {
    				if(!left.isEmpty()) {
    					right.add(left.pop());
    				}
    			}else if(cmd == '-') {
    				if(!left.isEmpty()) {
    					left.pop();
    				}
    			}else {
    				left.add(cmd);
    			}
    		}
    		StringBuilder ans = new StringBuilder();
    		while(!left.isEmpty()) {
    			ans.append(left.pop());
    		}
    		ans = ans.reverse();
    		while(!right.isEmpty()) {
    			ans.append(right.pop());
    		}
    		bw.write(ans+"\n");
    	}
    	bw.flush();
    }
}

'알고리즘 문제 풀이 > 자료구조' 카테고리의 다른 글

백준 1822 - 차집합  (0) 2021.12.10
백준 3078 - 좋은 친구  (0) 2021.12.10
백준 4195 - 친구 네트워크  (0) 2021.12.06
백준 4358 - 생태학  (0) 2021.08.25
백준 1918 - 후위 표기식  (0) 2021.08.07
Comments