[백준] 5430 - AC
2020. 11. 17. 10:52ㆍ알고리즘/Baekjoon
728x90
백준 바로가기
풀다가 시간이 모자라 다른 분의 풀이를 보고 해석한 문제입니다. 많이 어렵진 않은 문제라 설명이 짧습니다.
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 |