알고리즘
[백준] 5430번AC _ JAVA ( 주석 설명 ) 본문
풀이
1)
주어지는 함수가 R(뒤집기), D(삭제) 이므로, 주어진 자료구조를 읽어나가는 시점(처음, 끝)을 설정하는 게 중요하다. => deque 사용
start_point : true → 앞
start_point : false → 뒤
2)
'R' 이면 start_point 를 뒤집어주고,
'D' 이면 start_point 에 따라 pollFirst(), pollLast()를 한다.
- 이 때, poll() 한 값이 null 이면 error 이다.
3)
deque의 원소가 0개이더라도, "[]" 와 같이 출력을 해주어야 한다.
(공백으로 출력했다가, 계속 틀렸다..)
+
입력을 받을 때 [1,2,3,4,5] 형식으로 입력을 받는데
구분하려는 문자열을 StringTokenizer("[],") 한 번에 넘겨주면 된다.
"],[" 와 같이 순서 상관없이 넣어줘도 된다.
+
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws 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 function = br.readLine(); //수행할 함수
int n = Integer.parseInt(br.readLine());//배열에 들어있는 수의 개수
StringTokenizer st = new StringTokenizer(br.readLine(), "[],");
//Deque에 입력받은 배열의 정수를 넣는 과정
Deque<Integer> deque = new LinkedList<>();
for(int j=0;j<n;++j){
deque.addLast(Integer.parseInt(st.nextToken()));
}
//deque을 읽어나가는 시작 지점
//true : 앞에서부터
//flase : 뒤에서부터
boolean start_point = true;
boolean isError = false;
//함수를 수행하는 과정
//R(뒤집기), D(버리기)
for(int j=0;j<function.length();++j){
if('R' == function.charAt(j)){
start_point = !start_point;
}
else{
if(deque.isEmpty()){ //덱이 비어있으면
isError = true;
break;
}
else{ //덱에 원소가 들어있으면
if(start_point){ //deque을 읽어나가는 시작 지점이 true이면
deque.pollFirst();
}
else{
deque.pollLast();
}
}
}
}
//함수 수행이 끝나고 출력 형태 만들기
//빈 deque에서 D를 해서 error가 된 경우
if(isError){
sb.append("error").append('\n');
}
else {
sb.append("[");
//deque에 값이 있으면, D로 인한 null 체크
if(!deque.isEmpty()) {
if (start_point) { //deque을 읽어나가는 시작 지점이 true이면
Integer num = deque.pollFirst();
sb.append(num);
while (!deque.isEmpty()) {
sb.append(',').append(deque.pollFirst());
}
} else {
Integer num = deque.pollLast();
sb.append(num);
while (!deque.isEmpty()) {
sb.append(',').append(deque.pollLast());
}
}
}
sb.append("]").append('\n');
}
}
System.out.println(sb);
}
}
'백준 - JAVA > 큐, 덱' 카테고리의 다른 글
[백준] 1406번 에디터 _ JAVA ( 주석 설명 ) (0) | 2023.03.28 |
---|---|
[백준] 1021번 회전하는 큐 _ JAVA ( 주석 설명 ) (0) | 2023.03.28 |
[백준] 10866번 덱 _ JAVA ( 주석 설명 ) (0) | 2023.03.22 |
[백준] 1966번 프린터 큐 _ JAVA ( 주석 설명 ) (0) | 2023.03.22 |
[백준] 11866번 요세푸스 문제 0 _ JAVA ( 주석 설명 ) (0) | 2023.03.20 |