🧫 문제 분석
✔️ 출처
📖 문제

문자열, 구조 문제이다.
덱이 생각이 안나서 그냥 투 포인터로 풀었다..ㅎㅎㅎㅎ
문제에서 핵심은
문자열 파싱 : [1,2,3,4] 이런 식으로 입력이 주어지기에 이를 적절하게 파싱한다.
R : 배열 순서 뒤집기
D : 첫번째 요소 삭제
빈 배열에 D를 사용할 경우 에러 발생
[1,2] 에서 DD 를 하면 [] 을 출력한다. error가 아니다.
문자열 파싱은 subString으로 앞 뒤의 ' [ ' , ' ] ' 를 짤라내고
split으로 정규표현식을 사용하여 [^0-9]로 숫자가 아닌 모든 것을 기준으로 짤라 문자열 배열을 만들었고
이를 int 배열에 파싱하여 저장하였다.
두 개의 포인터를 사용하여 풀었다.
자세한건 코드를 참고해주면 좋을 것 같다.
🔅 문제 풀이
import java.io.*;
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++) {
String func = br.readLine(); // R,D 등 함수
int size = Integer.parseInt(br.readLine()); // 요소 개수
StringBuilder sb = new StringBuilder();
int[] arr = new int[size];
// 배열 입력 처리
String element = br.readLine();
String str = element.substring(1, element.length() - 1);
String[] split = str.split(",");
for (int j = 0; j < size; j++) {
arr[j] = Integer.parseInt(split[j]);
}
int pointer = 0, prePointer = arr.length - 1;
boolean flag = false; // false = 오름차, true 내림차
for (int j = 0; j < func.length(); j++) {
// R (뒤집기) 일 경우 두 포인터를 스왑
if (func.charAt(j) == 'R') {
int tmp = pointer;
pointer = prePointer;
prePointer = tmp;
flag = !flag; // 뒤집기
} else {
if (flag) pointer--;
else pointer++;
}
}
// 배열의 범위를 벗어날 경우 에러
if (pointer < -1 || pointer > size
|| prePointer < -1 || prePointer > size) {
bw.write("error\n");
continue;
}
sb.append("[");
if (flag) {
for (int j = pointer; j >= prePointer; j--) {
sb.append(arr[j]).append(",");
}
} else {
for (int j = pointer; j <= prePointer; j++) {
sb.append(arr[j]).append(",");
}
}
// 빈 배열이 아닐 경우 ',' 제거
if(sb.length() > 1) {
sb.deleteCharAt(sb.length() - 1);
}
sb.append("]\n");
bw.write(sb.toString());
}
bw.flush();
bw.close();
}
}
❗ 오답노트 / 필요한 지식
- swap 안쓴지 정말 오래되서 이상하게 swap해버려 초반에 틀렸다. 이번 기회에 다시 복습하게 되어 다행이다.
'baekjoon > String' 카테고리의 다른 글
백준 2179번 : 비슷한 단어 [자바] (0) | 2025.03.14 |
---|---|
백준 20437번 : 문자열 게임 2 [자바] (0) | 2025.03.09 |
백준 4659번 : 비밀번호 발음하기 [자바] (0) | 2025.03.06 |
백준 1036번 : 36진수 자바 (2) | 2024.08.28 |
백준 5525번 : IOIOI 자바 (0) | 2024.08.24 |