728x90
반응형
백준 1406 - Editor 만들기
* 자바로 구현
* 스택을 2개 사용해야 한다고 한다.
* 현재 커서를 기준으로 왼쪽과 오른쪽 두개의 스택을 운용하면 4개의 연산을 처리하는데 걸리는 시간은 매우 적다
* 알고리즘적 사고를 많이 키워야겠다!!
public class Editor_Double_Stack {
public static void main(String[] args) throws IOException{
Editor_Double_Stack ep = new Editor_Double_Stack();
ep.editor();
}
/** 에디터 구현 부*/
private void editor() throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String stream = br.readLine();
Stack<Character> left_stack = new Stack<>();
Stack<Character> right_stack = new Stack<>();
//일단 커서가 가장 오른쪽에 있을 것이기 때문에 초기 문자열은 모두 왼쪽 스택에 쌓자
for( int i = 0; i < stream.length(); i++){
left_stack.add(stream.charAt(i));
}
int command_amount = Integer.parseInt(br.readLine());
for( int i = 0; i < command_amount; i++) {
String command = br.readLine();
StringTokenizer stt = new StringTokenizer(command);
switch( stt.nextToken() ) {
// 왼쪽 이동 명령어가 들어오면 왼쪽 스택은 pop, 오른쪽 스택에 push
case "L":
if(!left_stack.isEmpty()) {
right_stack.push(left_stack.pop());
}
break;
// 오른쪽 이동 명령어가 들어오면 오른쪽 스택 pop, 왼쪽 스택 push
case "D":
if(!right_stack.isEmpty()) {
left_stack.push(right_stack.pop());
}
break;
// 커서 왼쪽 삭제이므로 왼쪽 스택 pop
case "B":
if(!left_stack.isEmpty()) {
left_stack.pop();
}
break;
// 커서 왼쪽 부분 삽입이므로 왼쪽 스택에 push
case "P":
char txt = stt.nextToken().charAt(0);
left_stack.push(txt);
break;
}
}
// 출력. 스택은 FILO 구조이기도 하고, 왼쪽 , 오른쪽 스택의 내용이 순차적으로 나와야 하기 때문에
// 왼쪽 스택의 내용을 모두 오른쪽 스택으로 옮기고 오른쪽 스택을 출력하자.
while(!left_stack.isEmpty()) {
right_stack.push(left_stack.pop());
}
while(!right_stack.isEmpty()) {
System.out.print(right_stack.pop());
}
}
}
반응형
'문제풀이 > 백준 문제풀이' 카테고리의 다른 글
[ 알고리즘 ] 코딩 백준 15961 - 회전초밥.java (0) | 2020.09.07 |
---|---|
[ 알고리즘 ]코딩 백준 9663 - N-Queen - 1차원배열을 이용해서 구현.java (0) | 2020.09.05 |
[ 알고리즘 ] 코딩 백준 2606 - 새로운 바이러스.java (0) | 2020.09.05 |
[ 알고리즘 ] 코딩 백준 2580 - 스도쿠 채우기.java (0) | 2020.09.05 |
[ 알고리즘 ] 코딩 백준 2887 - 행성 터널.java (0) | 2020.09.05 |