https://www.acmicpc.net/problem/5397
해당 문제는 하노이의 탑과 비슷한 개념이라고 생각했다.
총 세개의 막대(입력 값, 정답, 잠깐 빼두는 곳)를 두고 입력 값에서 정답으로 블록을 옮긴다고 생각하면
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 |