https://www.acmicpc.net/problem/1021
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
private static void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i <= n; i++)
list.add(i);
st = new StringTokenizer(br.readLine());
int cnt = 0; //횟수
while (m-- > 0) {
int num = Integer.parseInt(st.nextToken());
int idx = list.indexOf(num);
// 1번 연산
if (idx == 0) {
list.pollFirst();
continue;
}
// 2번 연산
if (idx < list.size() - idx) {
for (int i = 0; i < idx; i++ ){
list.offerLast(list.pollFirst()); // 앞에서 제거 후 뒤에 삽입
}
cnt += idx;
}
else { // 3번 연산
for (int i = 0; i < list.size() - idx; i++){
list.offerFirst(list.pollLast()); // 앞에서 제거 후 뒤에 삽입
}
cnt += list.size() - idx;
}
list.pollFirst(); // 인덱스 0 제거
}
System.out.println(cnt);
}
public static void main(String[] args) throws Exception {
solution();
}
}
deque.offerLast(); //Deque의 뒤쪽에 데이터를 삽입 후 true, 용량 초과시 false
deque.pollFirst(); // Deque의 앞에서 제거, 비어있으면 null 리턴
deque 참고 : https://hbase.tistory.com/128