풀이
- 풀면 풀 수록 자바보단 파이썬이 너무 편하다는 걸 느끼게 된다...
- 우선 자바에서 deque를 사용할 때엔 Deque를 사용하면서 안의 배열은
- 자유롭게 사용하지만 보통은 ArrayDeque나 LinkedList를 사용한다고 하는 것 같다.
- 그리고 다른 것은 뭐 그냥 간단한 것이기에 해결이 쉽지만
- 뭔가 애를 먹었던 부분이 else의 if 문에서 인덱스와 dq.size()/2 부분에서
- 정수 나누기 정수의 경우엔 정수로 되는 부분으로 한참 고생을 했다.
- 그리고 파이썬에서는 간단하게 인덱스를 찾을 수 있었지만
- 잘 몰라서 그런지 할 수 없다는 것을 알게 되어 따로 메서드를 정의하여 해결
- 마지막으로 문제에서 2번,3번 연산의 최솟값을 출력하라고 해서
- 둘 중 작은 값으로 출력해야하는 줄 알고도 조금 ... ㅎ
import java.io.*;
import java.util.*;
public class 회전하는큐 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st1 = new StringTokenizer(br.readLine());
StringTokenizer st2 = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st1.nextToken());
int m = Integer.parseInt(st1.nextToken());
int cnt = 0;
Deque<Integer> dq = new ArrayDeque<>();
for (int i = 1; i <= n; i++) dq.add(i);
for (int i = 0; i < m; i++) {
int x = Integer.parseInt(st2.nextToken());
while (true) {
if (x == dq.getFirst()) {
dq.removeFirst();
break;
}
else {
if (indexOf(dq, x) < (double) dq.size()/2) {
while (dq.getFirst() != x) {
cnt ++;
dq.addLast(dq.removeFirst());
}
} else {
while (dq.getFirst() != x) {
cnt ++;
dq.addFirst(dq.removeLast());
}
}
}
}
}
System.out.println(cnt);
}
private static double indexOf(Deque<Integer> deque, int target) {
Iterator<Integer> dq = deque.iterator();
double index = 0;
while (dq.hasNext()) {
if (dq.next() == target) {
return index;
}
index++;
}
return -1;
}
}
'알고리즘' 카테고리의 다른 글
[백준, 파이썬, 1051번] 숫자 정사각형 (0) | 2023.12.20 |
---|---|
[백준, 파이썬, 1021번] 회전하는 큐 (0) | 2023.12.19 |
[백준, 자바, 1049번] 기타줄 (0) | 2023.12.18 |
[백준, 파이썬, 1049번] 기타줄 (0) | 2023.12.18 |
[백준, 파이썬, 1159번] 농구 경기 (0) | 2023.12.13 |