코딩테스트/[백준] 코딩테스트 연습
카드 섞기 -21315번
쵼쥬
2021. 12. 2. 22:35
내 코드
package com.company;
import java.io.*;
import java.util.*;
public class Main {
static int N;
static int[] arr;
static LinkedList<Integer> ll = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < N; i++) {
ll.add(arr[i]);
}
for (int k1 = 1; Math.pow(2, k1) < N; k1++) {
for (int k2 = 1; Math.pow(2, k2) < N; k2++) {
boolean check = false;
ll.clear();
for (int i = 1; i <= N; i++) {
ll.add(i);
}
shuffle(k1);
shuffle(k2);
for (int i = 0; i < N; i++) {
if (arr[i] != ll.poll())
break;
if (i == N - 1)
check = true;
}
if (check) {
System.out.println(k1 + " " + k2);
return;
}
}
}
}
static void shuffle(int k) {
int bot = (int) Math.pow(2, k);
for (int i = 0; i < bot; i++) {
ll.add(0, ll.removeLast());
}
while (bot / 2 >= 1) {
for (int i = 0; i < bot / 2; i++) {
ll.add(0, ll.remove(bot - 1));
}
bot /= 2;
}
}
}