728x90
반응형
2024.08.08기준 - 골드5
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 R이 들어오면 배열을 뒤집고, D가 들어오면 맨 앞에 숫자를 제거하여 남은 배열을 출력하거나, error를 출력하는 문제입니다.
1. 저의 접근은 Deque를 사용해 배열 전체를 뒤집기 보다는 출력하는 위치를 바꿔주는 방식을 선택했습니다.
Deque<Integer> qu; // 배열을 저장할 큐
boolean check, filp; // error 여부, 뒤집기 여부
filp 변수를 생성해 false면 앞에서 출력, true라면 뒤에서 출력하는 방식으로 선택했습니다.
2. 입력 받은 배열을 "[,] "를 제외한 숫자만 입력을 받도록 설정했습니다.
st = new StringTokenizer(br.readLine(), "[,] ");
3. 입력 받은 함수와 배열로 error인지, 제외되는 수를 처리 해주었습니다.
for (int i = 0; i < p.length; i++) {
if (p[i] == 'R') { // 뒤집기
filp = !filp;
} else { // 맨 앞에 숫자 제외
if (!qu.isEmpty()) {
if (filp) { // 뒤
qu.pollLast();
} else { // 앞
qu.pollFirst();
}
} else { // 에러
check = false;
break;
}
}
}
4. 이렇게 정리된 배열을 filp의 상태에 따라 출력해줍니다.
if (!check) {
sb.append("error");
} else {
sb.append("[");
if (!qu.isEmpty()) { // 가운데 ,를 넣기 위해 처음 수는 따로 출력
sb.append((filp ? qu.pollLast() : qu.pollFirst()));
}
while (!qu.isEmpty()) {
sb.append(",").append((filp ? qu.pollLast() : qu.pollFirst()));
}
sb.append("]");
}
코드
package Main;
import java.io.*;
import java.util.*;
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));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine()); // 테스트 케이스 개수
char[] p; // 수행할 함수
int n; // 배열의 길이
StringTokenizer st; // 입력받은 배열
Deque<Integer> qu; // 배열을 저장할 큐
boolean check, filp; // error 여부, 뒤집기 여부
while (t-- > 0) {
p = br.readLine().toCharArray();
n = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), "[,] ");
qu = new LinkedList<>();
filp = false;
check = true;
while (st.hasMoreElements()) {
qu.add(Integer.parseInt(st.nextToken()));
}
for (int i = 0; i < p.length; i++) {
if (p[i] == 'R') { // 뒤집기
filp = !filp;
} else { // 맨 앞에 숫자 제외
if (!qu.isEmpty()) {
if (filp) { // 뒤
qu.pollLast();
} else { // 앞
qu.pollFirst();
}
} else { // 에러
check = false;
break;
}
}
}
if (!check) {
sb.append("error");
} else {
sb.append("[");
if (!qu.isEmpty()) { // 가운데 ,를 넣기 위해 처음 수는 따로 출력
sb.append((filp ? qu.pollLast() : qu.pollFirst()));
}
while (!qu.isEmpty()) {
sb.append(",").append((filp ? qu.pollLast() : qu.pollFirst()));
}
sb.append("]");
}
sb.append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 28419번 더하기 (0) | 2024.08.08 |
---|---|
BEAKJOON / 백준 - JAVA 22993번 서든어택3 (0) | 2024.08.08 |
BEAKJOON / 백준 - JAVA 27294번 몇개고? (0) | 2024.08.08 |
BEAKJOON / 백준 - JAVA 11286번 절댓값 힙 (0) | 2024.08.07 |
BEAKJOON / 백준 - JAVA 11279번 최대 힙 (0) | 2024.08.06 |