일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 한국이 그리울 땐 서버에 접속하지
- dfs
- 규영이와 인영이
- 2578
- 8911
- next_permutation
- 9996
- SWEA
- 햄버거 다이어트
- 돌리기
- 인접리스트
- 키로거
- 5397
- 백준
- 12865
- 11444
- 플로이드
- 2638
- 마법사 상어와 블리자드
- 강의실 배정
- 자바
- 1043
- 피보나치 수 6
- 다음순열
- 11404
- 평범한 배낭
- 1138
- 삼성 소프트웨어 아카데미
- 16935
- 21611
Archives
- Today
- Total
기록하는 블로그
백준 5397 - 키로거 본문
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