[백준] 5430 - AC
2020. 11. 17. 10:52ㆍ알고리즘/Baekjoon
728x90
백준 바로가기
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
풀다가 시간이 모자라 다른 분의 풀이를 보고 해석한 문제입니다. 많이 어렵진 않은 문제라 설명이 짧습니다.
1. 배열생성
- 앞, 뒤에서 문자 뽑는 함수가 있으므로 Deque 사용
- Deque = Double End Queue
- 빈 배열일 때 D(Delete)될 수 없기 때문에 error 처리
- StringTokenizer로 입력받은 배열을 Deque에 저장
2. 함수 실행
- R일 경우 boolean r을 false로 바꿈
- D일 경우 r이 false면 pollLast(맨 뒤 index 뺌), true면 pollFist(맨 앞 index 뺌)
- D일 경우 Deque 사이즈가 0이면 errorFlag를 true로 바꾸고 반복문 종료
3. 남은 수 출력
- r이 true일 경우 반대로 출력(pollLast 반복), false일 경우 정상 출력(pollFist)
4. 코드
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
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");
}
}
}
|
cs |
'알고리즘 > Baekjoon' 카테고리의 다른 글
[백준] 12015 - 가장 긴 증가하는 부분 수열2 (0) | 2020.12.09 |
---|---|
[백준] 11279 - 최대 힙 (0) | 2020.12.07 |
[백준] 1874 - 스택 수열 (0) | 2020.11.06 |
[백준] 11047 - 동전 0 (0) | 2020.10.21 |
[백준] 11054 - 가장 긴 바이토닉 부분 수열 (0) | 2020.10.20 |