[백준] 5397. 키로거
문제 링크
풀이 과정
커서를 기준으로 삽입과 삭제가 발생해야 하므로, 스택을 두 개 사용해 문제를 풀었습니다. 스택과 스택 사이에는 커서가 위치한다고 생각하면 됩니다. 따라서, 커서의 위치를 이동시키는 <
또는 >
가 입력되면, 스택의 맨 위의 문자를 반대 방향의 스택으로 옮겨주어 처리할 수 있습니다.
예를 들어, _ 를 커서 위치라고 했을 때 AB_CDE
는, 다음과 같이 구성됩니다.
그리고, right 스택의 top 을 모두 left 스택으로 옮기면, 아래와 같이 뒤집어 left 에 붙게 됩니다.
코드
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int TC = sc.nextInt();
for (int tc = 1; tc <= TC; tc++) {
String str = sc.next();
Stack<Character> left = new Stack<>();
Stack<Character> right = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch == '<') {
if (!left.isEmpty()) right.push(left.pop());
} else if (ch == '>') {
if (!right.isEmpty()) left.push(right.pop());
} else if (ch == '-') {
if (!left.isEmpty()) left.pop();
} else left.push(ch);
}
StringBuilder sb = new StringBuilder();
while (!right.isEmpty()) left.push(right.pop());
while (!left.isEmpty()) sb.append(left.pop());
System.out.println(sb.reverse());
}
}
}
댓글남기기