문제
풀이
비밀번호와 커서의 이동을 각각 표현할 2개의 스택(password, arrow)을 사용해 풀이한다. '-'를 입력받을 경우 password가 공백 상태가 아니라면 pop하여 커서의 바로 앞 글자를 지우고, '<'나 '>'가 입력되면 password에서 요소를 pop해 arrow에 push하거나 그 반대의 작업을 수행한다.
char c=pw[j];
switch(c) {
case '-':
if(!password.isEmpty())
password.pop();
break;
case '<':
if(!password.isEmpty())
arrow.push(password.pop());
break;
case '>':
if(!arrow.isEmpty())
password.push(arrow.pop());
break;
default:
password.push(c);
break;
}
switch문을 사용하였으나 if문으로 구현해도 무방하다.
커서 왼쪽의 문자들은 password 스택에, 커서 오른쪽의 문자들은 arrow 스택에 배치한다고 생각하면 간단하다.
'-', '>', '<'를 제외한 나머지 문자들은 커서가 위치한 자리에 그대로 삽입하면 되므로 password 스택에 push해 준다.
while(!arrow.isEmpty())
password.push(arrow.pop());
문자열 길이만큼 반복을 완료한 후, arrow 스택에 남아 있던 문자들을 모두 password 스택에 push하면 마무리된다.
전체 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
int t=Integer.parseInt(br.readLine());
for(int i=0; i<t; i++) {
Stack<Character> password=new Stack<>();
Stack<Character> arrow=new Stack<>();
char[] pw=br.readLine().toCharArray();
for(int j=0; j<pw.length; j++) {
char c=pw[j];
switch(c) {
case '-':
if(!password.isEmpty())
password.pop();
break;
case '<':
if(!password.isEmpty())
arrow.push(password.pop());
break;
case '>':
if(!arrow.isEmpty())
password.push(arrow.pop());
break;
default:
password.push(c);
break;
}
}
while(!arrow.isEmpty())
password.push(arrow.pop());
for(int j=0; j<password.size(); j++) {
bw.write(password.get(j));
}
bw.write("\n");
}
bw.flush();
}
}
빠른 입출력을 위해 BufferedReader와 BufferedWriter를 사용했다.
'백준' 카테고리의 다른 글
백준 1463: 1로 만들기(java) (0) | 2024.08.09 |
---|---|
백준 1874: 스택 수열(java) (0) | 2024.08.07 |
백준 1302: 베스트셀러(java) (0) | 2024.08.07 |
백준 1065: 한수(java) (0) | 2024.08.02 |
백준 1935: 후위 표기식 2(java) (0) | 2024.07.25 |