백준(Java)/23년 8월
[Java] 백준 - 1406번: 에디터
C0MPAS
2023. 8. 8. 23:08
8월 8일(화) - 자료 구조 (1406번)
1406번: 에디터
첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
(C언어 풀이 활용 -> C에서 배열로 나눈것과 다르게 left_stack 과 right_stack 으로 나누어서 구현)
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 IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
Stack<Character> left_stack = new Stack<>();
Stack<Character> right_stack = new Stack<>();
for(int i=0; i<str.length(); i++)
{
left_stack.push(str.charAt(i));
}
int N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++)
{
String cmd = br.readLine();
switch (cmd.charAt(0))
{
case 'L':
{
if(left_stack.empty())
{
break;
}
right_stack.push(left_stack.pop());
break;
}
case 'D':
{
if(right_stack.empty())
{
break;
}
left_stack.push(right_stack.pop());
break;
}
case 'B':
{
if(left_stack.empty())
{
break;
}
left_stack.pop();
break;
}
case 'P':
{
left_stack.push(cmd.charAt(2));
break;
}
}
}
while (!left_stack.empty())
{
right_stack.push(left_stack.pop());
}
StringBuilder sb = new StringBuilder();
while (!right_stack.empty())
{
sb.append(right_stack.pop());
}
System.out.println(sb.toString());
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ