https://www.acmicpc.net/problem/5430
풀이
아무 생각 없이 풀면 시간초과가 나는 문제다.. reverse함수를 썼다가 처음에 틀렸다.
배열을 뒤집을 때 진짜 뒤집지 말고 덱 자료구조와 어디가 앞인지 기록하며 풀이해야한다.
숫자 배열을 입력받을 때 [1,2,3] 이런 식으로 입력이 들어오므로
substring 함수를 사용해 [ ] 문자를 잘라내고 split(',') 함수를 사용해 숫자를 가져온다.
arrStr = br.readLine();
arrStr = arrStr.substring(1, arrStr.length()-1);
String[] split = arrStr.split(",");
for(int i=0; i<n; i++){
arr.add(Integer.parseInt(split[i]));
}
1. 덱에 숫자들을 순서대로 넣는다. / 덱의 방향이 오른쪽으로 간다는 의미의 변수를 생성한다. (boolean isRight = true)
2. 함수 문자열을 차례대로 확인한다.
2-1. 'R'이면 덱의 방향을 반대로 바꾼다. (isRight != isRight)
2-2. 'D'이면 덱이 비었는지 확인하고 비었으면 에러이므로 반복문을 빠져나온다.
2-3. 덱의 방향이 오른쪽이면 덱의 첫 번째 요소를 제거한다. (removeFirst)
2-4. 덱의 방향이 왼쪽이면 덱의 마지막 요소를 제거한다. (removeLast)
3. 에러 발생 시 'error'를 출력한다.
4. 에러가 아닐 시 StringBuilder를 통해 방향에 맞게 출력문을 만들어 출력한다.
전체 코드
package 구현;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
public class BOJ_5430_AC {
public static int T, n;
public static String func, arrStr;
public static ArrayDeque<Integer> arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
for(int t=0; t<T; t++){
func = br.readLine();
n = Integer.parseInt(br.readLine());
arr = new ArrayDeque<>();
boolean isRight = true;
boolean isError = false;
arrStr = br.readLine();
arrStr = arrStr.substring(1, arrStr.length()-1);
String[] split = arrStr.split(",");
for(int i=0; i<n; i++){
arr.add(Integer.parseInt(split[i]));
}
for(int i=0; i<func.length(); i++){
if(func.charAt(i) == 'R'){
isRight = !isRight;
}else{
if(arr.isEmpty()){
isError = true;
break;
}
if(isRight){
arr.removeFirst();
}else{
arr.removeLast();
}
}
}
if(!isError){
if(isRight){
StringBuilder sb = new StringBuilder();
sb.append('[');
if(arr.isEmpty()){
}
else{
sb.append(arr.pollFirst());
while(!arr.isEmpty()){
sb.append(',');
sb.append(arr.pollFirst());
}
}
sb.append(']');
System.out.println(sb.toString());
}else{
StringBuilder sb = new StringBuilder();
sb.append('[');
if(arr.isEmpty()){
}
else{
sb.append(arr.pollLast());
while(!arr.isEmpty()){
sb.append(',');
sb.append(arr.pollLast());
}
}
sb.append(']');
System.out.println(sb.toString());
}
}
else{
System.out.println("error");
}
}
}
}
'Coding Test' 카테고리의 다른 글
[백준] 20058 마법사 상어와 파이어스톰 - 자바 (0) | 2022.04.09 |
---|---|
[프로그래머스] 행렬 테두리 회전하기 - Python (0) | 2021.10.24 |
[프로그래머스] 2020 카카오 인턴십 - 경주로 건설 (JAVA) (0) | 2021.08.05 |
[프로그래머스] 디스크 컨트롤러 - JAVA (0) | 2021.08.03 |
[프로그래머스] 짝지어 제거하기 - JAVA (1) | 2021.07.31 |