왕의 과제
면접 대비시간 제한3초메모리 제한512 MB
1부터 2n까지의 순열이 주어질 때, 인접한 쌍을 바꾸는 연산과 앞뒤 절반을 바꾸는 연산만으로 정렬하는 최소 횟수를 구하고, 불가능하면 -1을 출력한다.
문제
용감한 기사가 왕을 찾아와 공주와 결혼하게 해 달라고 청했다. 왕은 기사가 용감하다는 것은 알았지만, 똑똑한지도 알고 싶었다. 그래서 다음과 같은 과제를 내주었다.
1부터 까지의 수를 나열한 순열 가 있다. 다음 두 종류의 연산을 할 수 있다.
- 과 , 과 , ..., 과 을 교환한다.
- 과 , 과 , ..., 과 을 교환한다.
주어진 순열을 정렬하는 데 필요한 최소 연산 횟수를 구하는 것이 과제다.
기사는 사실 그렇게 똑똑하지는 않았지만 매력은 있었다. 그래서 공주가 여러분에게 왕의 과제를 해결하도록 도와달라고 부탁한다.
입력
첫째 줄에 정수 이 주어진다 (). 둘째 줄에 개의 정수 가 주어진다. 이는 1부터 까지의 수를 나열한 순열이다.
출력
순열을 정렬하는 데 필요한 최소 연산 횟수를 정수로 출력한다. 이 연산들로 순열을 정렬할 수 없다면 을 출력한다.
힌트
첫 번째 예에서 다음과 같이 세 번의 연산으로 순열을 정렬할 수 있다.
- 연산 1을 한다: .
- 연산 2를 한다: .
- 연산 1을 한다: .