알고리즘

[boj5397/Java] 키로거(Stack)

IT 참다랑어 2023. 7. 24. 15:33

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

 

5397번: 키로거

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

www.acmicpc.net

 

해당 문제는 하노이의 탑과 비슷한 개념이라고 생각했다.

총 세개의 막대(입력 값, 정답, 잠깐 빼두는 곳)를 두고 입력 값에서 정답으로 블록을 옮긴다고 생각하면

stack을 이용해서 문제를 풀 수 있다.

 

Java 에서 Stack을 이용하는 방법은 다음과 같다.

1. 선언

import java.util.Stack;
Stack<Integer> stack = new Stack<>();

2. 함수

기능 함수 리턴
삽입 push 삽입한 요소 반환
제거 pop 제일 마지막에 들어간 요소 삭제 및 반환
조회 peek 제일 마지막에 들어간 요소 반환
검색 search(vector의 contains) 요소의 위치 반환(true flase 반환)
비어있는지 확인 empty(-> isEmpty()함수를 쓰는 것이 권장) boolean 반환(비어있으면 true)

 

입력되어 있는 stack(pwd)에서 <를 입력받았을 때 top을 빼고, 다른 stack(del)에 넣어두고

>를 입력받으면 del에 있던 top을 빼서 pwd에 넣어줬다.

그리고 -를 입력받으면 pwd에 있는 top을 빼줬다.

마지막으로 이외의 경우에는 pwd에 입력값을 넣는것으로 구현했다.

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

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		for(int i = 0; i<T; i++) {
			String s = br.readLine();
			int idx = 0;
			char[] sarr = s.toCharArray();
			Stack<Character> pwd = new Stack<>();
			Stack<Character> del = new Stack<>();
			for(int j = 0; j<sarr.length; j++) {
				switch(sarr[j]) {
				case '<':
					if(!pwd.isEmpty()) {
						del.push(pwd.pop());
					}
					break;
				case '>':
					if(!del.isEmpty()) {
						pwd.push(del.pop());
					}
					break;
				case '-':
					if(!pwd.isEmpty()) {
						pwd.pop();
					}
					break;
				default:
					pwd.push(sarr[j]);
				}
			}
			while(!del.isEmpty()) {
				pwd.push(del.pop());
			}
			for(int j = 0; j<pwd.size(); j++) {
				sb.append(pwd.get(j));					
			}
			sb.append('\n');
		}
		System.out.println(sb.toString());
	}

}

'알고리즘' 카테고리의 다른 글

[boj3649/Java]로봇 프로젝트  (0) 2023.07.31
[boj17144/Java] 미세먼지 안녕!  (0) 2023.07.26
[boj13335/Java] 트럭(Queue 사용법)  (0) 2023.07.24
[boj2477/Java] 참외밭  (0) 2023.07.20
[boj3474/JAVA] 교수가 된 현우  (0) 2023.07.20