728x90
문제
*참으로 거지같은 문제였다. 로직은 틀린게 없는데 왜 틀리나 했는데, 입력을 스캐너로 해줘야한다.
버퍼 리더를 못받는다.
문제 링크: https://www.acmicpc.net/problem/5430
원리
덱(Deque)을 사용하여 리버스일 때를 구분해주면 된다.
풀이방법
1. boolean 값을 두고, R이 들어오는 경우마다 reverse상태를 변경해준다.
2. D의 개수가 숫자보다 많으면 애시당초 확인해볼것도 없이 error다
3. ArrayList에 넣어두고 출력하면 배열로 자동 나온다.
4. 배열과 같은 형식으로 입력되기 때문에, 입력시 [ ] , 를 제거해주는 로직이 필요하다.
나의 코드
1. boolean을 이용한 R (reverse) 확인 방식 [로컬성공, 백준 실패 왜??]
=> 버퍼 리더를 못잡음
더보기
import java.io.*;
import java.util.*;
public class no5430 {
static boolean reverse;
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());
while(T-->0) {
int cnt = 0;
String[] P = br.readLine().split("");
for(int i = 0; i < P.length ; i++) if(P[i].equals("D")) cnt++;
int N1 = Integer.parseInt(br.readLine());
int N2 = N1;
String str = br.readLine();
if (cnt > N1) {
bw.write("error\n");
} else {
reverse = false;
String arr = str.replace("[", "").replace("]", "").replace(",", " ");
StringTokenizer st = new StringTokenizer(arr, " ");
Deque<String> dq = new ArrayDeque<>();
while (N2-- > 0) dq.add(st.nextToken());
AC(dq, P);
List<String> list = toList(new ArrayList<>(dq.size()),dq);
bw.write(list+"\n");
}
}
bw.close();
}
private static void AC(Deque<String> dq, String[] P) {
for(int i =0; i < P.length ; i++) {
if (P[i].equals("R")) {
if(reverse) reverse = false;
else reverse = true;
}
else if (P[i].equals("D") && reverse) dq.pollLast();
else dq.pollFirst();
}
}
private static ArrayList<String> toList (ArrayList<String> list, Deque<String> dq) {
int size = dq.size();
for(int i = 0; i < size; i++) {
if(reverse) list.add(i,dq.pollLast());
else list.add(i, dq.pollFirst());
}
return list;
}
}
1. boolean을 이용한 R (reverse) 확인 방식2 [로컬성공, 백준 실패 왜??]
=> 버퍼 리더를 못잡음
더보기
import java.io.*;
import java.util.*;
public class no5430 {
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 = 1; i <= T; i++) {
String p = br.readLine();
int N = Integer.parseInt(br.readLine());
String arr = br.readLine().replace("[", "").replace("]", "").replace(",", " ");
StringTokenizer st = new StringTokenizer(arr, " ");
Deque<String> dq = new ArrayDeque<>();
while (N-- > 0) dq.add(st.nextToken());
AC(dq, p, bw);
}
bw.close();
}
private static void AC(Deque<String> dq, String commands, BufferedWriter bw) throws IOException {
boolean reverse = false;
for (char command : commands.toCharArray()) {
if (command == 'R') reverse = !reverse;
else {
if (dq.size() == 0) bw.write("error\n");
if (reverse) dq.pollLast();
else dq.pollFirst();
}
}
List<String> list = new ArrayList<>();
while (!dq.isEmpty()) list.add(reverse ? dq.pollLast() : dq.pollFirst());
if(!list.isEmpty()) bw.write(list+"\n");
}
}
레퍼런스 코드
* 스캐너 사용
더보기
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int tc = 1; tc <= T; tc++) {
String p = sc.next();
int n = sc.nextInt();
String arrStr = sc.next();
Deque<Integer> deque = new LinkedList<>();
for (String s : arrStr.substring(1, arrStr.length() - 1).split(","))
if (!s.equals(""))
deque.add(Integer.valueOf(s));
System.out.println(ac(deque, p));
}
}
static String ac(Deque<Integer> deque, String commands) {
boolean reverse = false;
for (char command : commands.toCharArray()) {
if (command == 'R')
reverse = !reverse;
else {
if (deque.size() == 0)
return "error";
if (reverse)
deque.removeLast();
else
deque.removeFirst();
}
}
StringBuilder sb = new StringBuilder("[");
while (!deque.isEmpty()) {
sb.append(reverse ? deque.removeLast() : deque.removeFirst());
if (deque.size() != 0)
sb.append(',');
}
sb.append(']');
return sb.toString();
}
}
728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > JAVA' 카테고리의 다른 글
[Softeer] 업무 처리 (★★★☆☆) (0) | 2023.02.03 |
---|---|
[백준] no11047: 동전0 (0) | 2023.02.03 |
[백준] no1620: 나는야 포켓몬 마스터 이다솜 (1) | 2023.02.02 |
[백준] no1107: 리모컨 (0) | 2023.01.31 |
[공식] 자료구조 공식 모음 (0) | 2023.01.30 |