알고리즘 문제풀이/BOJ [BOJ] 백준 5430번 AC 자바(java) 풀이 - BOJ 5430번 AC 문제 자바(java) 풀이 랭크 : 실버2 백준 5430번 AC 문제 정리 AC에는 정수 배열을 위한 두 가지 함수가 있다. R(뒤집기) : 배열에 있는 숫자 순서를 뒤집는다. D(버리기) : 첫 번째 숫자를 버린다. RDD 처럼 함수를 바로 이어서 사용할 수 있다. 한 번 뒤집은 다음 두개의 숫자를 버린다. 함수 실행 후, 최종 결과를 구하여라 문제 풀이 수를 실제로 뒤집고 반복한다면 시간초과가 나게 될것입니다.그러므로 deque를 이용하여 앞 뒤에서 숫자를 지워줍니다. 파싱하는 것이 중요합니다. 숫자는 한자리수가 아니라 최대 100,000임을 인지해야 합니다. 이것 때문에 런타임 에러를 많이 봤습니다..ㅠㅠ 배열에 주어진 수가 하나도 없을때 함수에 D가 포함되어 있다면 에러를 표시합니다. 그렇지 않다면 '['와 ']'를 잘라내고 ','를 기준으로 parsing하여 deque에 넣습니다. 그리고 R에 따라서 수를 앞, 뒤로 뺍니다. 만약에 빼려는데 deque가 비었다면 error를 출력합니다. error 없이 정상적으로 모두 실행했다면 출력형식에 맞게 deque에서 꺼내서 출력합니다. 백준 5430번 AC 자바 소스코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Deque; import java.util.LinkedList; import java.util.StringTokenizer; class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); StringTokenizer st = null; for(int tc=1; tc<=T; tc++) { String cmdd = br.readLine(); char[] cmd = cmdd.toCharArray(); int n = Integer.parseInt(br.readLine()); Deque<String> dq = new LinkedList<>(); String input = br.readLine(); input = input.substring(1, input.length()-1); if(n != 0) st = new StringTokenizer(input, ","); else { // 배열에 주어진 수가 없는데 빼려하면 error // 빼려하지 않으면 "[]" 출력 if(cmdd.contains("D")) System.out.println("error"); else System.out.println("[]"); continue; } for(int i=0; i<n; i++) dq.add(st.nextToken()); // true면 정방향 -> 앞에서 지움 // false: 역방향 -> 뒤에서 지움 boolean r = true; boolean errorFlag = false; for(int i=0; i<cmd.length; i++) { // 방향 바꾸기 if(cmd[i] == 'R') r = !r; else { // 뺄게 없으면 오류 if(dq.isEmpty()) { errorFlag = true; break; } // 정방향 이면 앞에서 빼기 if(r) dq.pollFirst(); else dq.pollLast(); // 역방향이면 뒤에서 빼기 } } // 에러가 안났으면 남은 수 출력 if(!errorFlag) { System.out.print("["); if(r) { while(dq.size() > 1) System.out.print(dq.pollFirst() + ","); } else { while(dq.size() > 1) System.out.print(dq.pollLast() + ","); } if(dq.size() != 0) System.out.print(dq.getFirst()); System.out.println("]"); } else { System.out.println("error"); } } } } 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기Code by horang Contents 당신이 좋아할만한 콘텐츠 [BOJ] 백준 2565번 전깃줄 자바(java) 코드 :: LIS(Longest Increasing Sequence) 찾기 2020.03.24 [BOJ] 백준 1561번 놀이공원 자바(java) 풀이 (이분 탐색) 2020.03.23 [BOJ] 백준 1874번 스택 수열 자바(java) 풀이 2020.03.20 [BOJ] 백준 2517번 달리기 자바(java) 풀이 (merge sort 풀이, segment tree 풀이) 2020.03.19 댓글 0 + 이전 댓글 더보기