Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Encapsulation
- nextInt
- 버퍼비우기
- 객체 지향
- 열거형
- 객체지향
- polymorphism
- 인터페이스
- 내부 클래스
- 최소신장트리
- 생성자
- inheritance
- 프림알고리즘
- 캡슐화
- enum
- 추상 클래스
- 제네릭
- 추상화
- 상속
- java
- 17472
- python
- abstract
- Scanner
- 백준
- 와일드카드
- 다형성
- Final
- this
Archives
- Today
- Total
쫑쫑이의 블로그
백준 5430 AC Java [구현, 파싱] 본문
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
문제는 어렵지 않은데 입력값을 받는 것과 출력값 만드는 과정에서 많이 힘들었다
1. 입력값을 받을 때 [], 를 처리
2. 출력값을 만들 때 int[]를 reverse 처리
R이 나오면 boolean 값으로 reverse할지 안할지 처리하는 flat으로 사용하고
D가 나오면 left가 right보다 크면 Error처리하고 break한다
크지 않으면 flat에 따라 left 값을 늘리거나, right 값을 줄였다
package gold;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
String[] func = br.readLine().split("");
int N = Integer.parseInt(br.readLine());
String str = br.readLine();
int[] arr = N != 0 ? Arrays.stream(str.substring(1, str.length() - 1).split(",")).mapToInt(Integer::parseInt).toArray() : new int[]{};
int left = 0, right = N - 1;
boolean isReversed = false;
boolean isBreak = false;
for (int f = 0; f < func.length; f++) {
if (func[f].equals("R")) isReversed = !isReversed;
else {
if (left > right) {
isBreak = true;
break;
}
if (isReversed) right--;
else left++;
}
}
if (isBreak) sb.append("error");
else {
int[] ar = Arrays.copyOfRange(arr, left, right + 1);
List<Integer> list = Arrays.stream(ar).boxed().collect(Collectors.toList());
if (isReversed) Collections.reverse(list);
sb.append(Arrays.toString(list.toArray()).replace(" ", ""));
}
sb.append("\n");
}
System.out.println(sb);
}
}
입력값을 받을 때 new StringTokenizer(br.readLine(), "[],"); 으로 숫자만 처리해줄 수 있다
생각보다 속도가 느리게 나왔는데 덱을 사용하는게 좋아보인다
추가 엣지 테스트케이스
3
DD
2
[1,2]
R
0
[]
D
0
[]
결과값
[]
[]
Error
'알고리즘 > 백준' 카테고리의 다른 글
백준 2357 최솟값과 최댓값 Java [세그먼트 트리] (0) | 2022.12.16 |
---|---|
백준 3020 개똥벌레 Java [누적합] (0) | 2022.11.30 |
백준 20924 트리의 기둥과 가지 Java [DFS] (0) | 2022.11.29 |
백준 1068 트리 Java [DFS] (0) | 2022.11.28 |
백준 11000 강의실 배정 Java [우선순위 큐] (0) | 2022.11.27 |