BAEK_5397_키로거

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

5397. 키로거

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
	static class Stack{
		private int top;
	    private int maxSize;
	    private char[] stackArray;
	    
	    public Stack(int maxSize){	        
	        this.maxSize = maxSize;
	        this.stackArray = new char[maxSize];
	        this.top = -1;
	    }
	    
	    public boolean empty(){
	        return (top == -1);
	    }
	    
	    public boolean full(){
	        return (top == maxSize-1);
	    }
	    
	    public void push(char item){
	        if(full()) throw new ArrayIndexOutOfBoundsException((top+1)+">=" + maxSize);
	        stackArray[++top] = item;
	    }
	    
	    public char peek(){
	        if(empty()) throw new ArrayIndexOutOfBoundsException(top);
	        return stackArray[top];
		}
		
	    public char pop(){
	    	char item = peek();
	    	stackArray[top] = ' ';
	        top--;
	        return item;
		}
		
	    public String toString() {
	    	StringBuilder sb = new StringBuilder();
	    	for(int i=0; i<top+1; i++) {
	    		sb.append(stackArray[i]);
	    	}
	    	return sb.toString();
		}
		
	    public String toRevString() {
	    	StringBuilder sb = new StringBuilder();
	    	for(int i=top; i>=0; i--) {
	    		sb.append(stackArray[i]);
	    	}
	    	return sb.toString();
	    }
	}
	static int T, cursor, len;
	static String input, ans;
	public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb;
		T = Integer.parseInt(br.readLine());
		for(int tc=0; tc<T; tc++) {
			int cursor = 0;
			sb = new StringBuilder();
			input = br.readLine();
			len = input.length();
			
			Stack stack1 = new Stack(len);
			Stack stack2 = new Stack(len);
			
			for(int i=0; i<len; i++) {
				char ch = input.charAt(i);
				
				switch (ch) {
				case '>':
					if(stack2.top==-1) {
						continue;
					}else {
						stack1.push(stack2.pop());
					}
					break;
				case '<':
					if(stack1.top==-1) {
						continue;
					}else {
						stack2.push(stack1.pop());
					}
					break;
				case '-':
					if(stack1.top==-1) {
						continue;
					}else {
						stack1.pop();
					}
					break;
				default:
					stack1.push(ch);
					break;
				}
			}
			
			sb.append(stack1.toString());
			sb.append(stack2.toRevString());
			
			bw.write(sb.toString());
			bw.write("\n");
		}
		bw.flush();
	}
}

© 2019. All rights reserved.

Powered by Hydejack v8.5.2