[알고리즘][X] AC
2024. 2. 6. 11:26ㆍ알고리즘 풀이/Java
https://www.acmicpc.net/problem/5430
package boj.solution5430;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
static StringBuilder sb = new StringBuilder();
// 더블리 링크드 구현 시도했으나 그럴 필요가 없음을 알게 됨
// static class Node {
// int number;
// Node nextNode;
//
//
// public Node(int number) {
// this(number, null);
// }
//
//
// public Node(int number, Node nextNode) {
// super();
// this.number = number;
// this.nextNode = nextNode;
// }
//
// }
//
// static class LinkedList {
//
// Node head;
// Node tail;
//
// public LinkedList() {
// head = getNewNode(0);
// tail = head;
// }
//
// public Node getNewNode(int number) {
// return new Node(number);
// }
//
// public void addLast(int number) {
// Node newNode = getNewNode(number);
// tail.nextNode = newNode;
// tail = newNode;
// }
//
// public void reverse() {
// if (head.nextNode == null) {
// return;
// }
// Node firstNode = head.nextNode;
// Node lastNode = tail;
//
// head.nextNode = lastNode;
// tail = firstNode;
// }
// }
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for (int testCase = 1; testCase <= T; testCase++) {
char[] p = br.readLine().toCharArray();
int n = Integer.parseInt(br.readLine());
char[] inputArray = br.readLine().toCharArray();
char[] filtered = Arrays.copyOfRange(inputArray, 1, inputArray.length - 1);
st = new StringTokenizer(String.valueOf(filtered), ",");
Deque<Integer> deque = new ArrayDeque<>();
for (int i = 0; i < n; i++) {
deque.addLast(Integer.parseInt(st.nextToken()));
}
boolean errorFlag = false;
boolean reverseFlag = false;
for (char c : p) {
if (c == 'R') {
reverseFlag = !reverseFlag;
}
if (c == 'D') {
if (deque.isEmpty()) {
errorFlag = true;
break;
}
if (reverseFlag) {
deque.removeLast();
} else {
deque.removeFirst();
}
}
}
if (errorFlag) {
sb.append("error").append("\n");
} else {
// reverse나 List로 바꾸기, 출력하기 등 O(n)이기 때문에 O(3n)이 되고 따라서 느리다고 생각했다.
// List<Integer> result = new ArrayList<>();
// while (!deque.isEmpty()) {
// result.add(deque.removeFirst());
// }
// if (reverseFlag) {
// Collections.reverse(result);
// }
// sb.append("[");
// for (int i = 0; i < result.size(); i++) {
// sb.append(result.get(i));
// if (i != result.size() -1) {
// sb.append(",");
// }
// }
// sb.append("]\n");
// O(n)이 한번씩만 걸리도록 하였지만 32ms 밖에 차이가 나지 않았다.
sb.append("[");
if (reverseFlag) {
while (deque.size() > 1) {
sb.append(deque.removeLast()).append(",");
}
if (!deque.isEmpty()) {
sb.append(deque.removeLast());
}
} else {
while (deque.size() > 1) {
sb.append(deque.removeFirst()).append(",");
}
if (!deque.isEmpty()) {
sb.append(deque.removeFirst());
}
}
sb.append("]\n");
}
}
System.out.print(sb);
}
}
나의 풀이
- 예외처리를 잘해줘야 했다.
- 난 ","이 마지막에 있다고 해서 sb.delete(sb.length-1)을 해줬는데 이러면 ","를 아예 안쓰는 경우 "["가 삭제되는 문제가 발생한다.
'알고리즘 풀이 > Java' 카테고리의 다른 글
[알고리즘] 배열 돌리기 1 (1) | 2024.02.06 |
---|---|
[알고리즘] 트리 정리 (0) | 2024.02.06 |
[알고리즘] 요세푸스 문제 (0) | 2024.02.05 |
[알고리즘] 한빈이와 Spot Mart (0) | 2024.02.05 |
[알고리즘] 수열 편집 (1) | 2024.02.05 |