졸린 소 정렬
면접 대비시간 제한2초메모리 제한512 MB
맨 앞 소를 뒤쪽 임의의 위치로 옮기는 연산만으로 순열을 정렬하는 최소 이동 횟수와 각 이동 크기를 구한다.
문제
농부 존은 마리의 소()를 아침 식사를 위해 목초지로 나가기 전에 정렬하려고 한다. 소에게는 편의상 의 번호가 붙어 있다.
현재 소들은 의 순서로 한 줄로 서 있고, 농부 존은 소 앞에 서 있다. 그는 소들을 의 순서로, 즉 소 이 농부 존 옆에 오도록 재배치하려고 한다.
오늘 소들은 조금 졸려서, 어느 시점이든 농부 존의 지시에 귀를 기울이는 소는 농부 존과 마주 보고 있는 소 한 마리뿐이다. 한 시간 단계에서 그는 이 소에게 줄에서 걸음만큼 이동하라고 지시할 수 있으며, 는 이상 이하의 임의의 정수이다. 그 소가 지나치는 마리의 소는 앞으로 비켜서서 그 소가 그들 뒤에 들어갈 자리를 만든다.
예를 들어 이고 소들이 다음과 같은 순서로 시작한다고 하자.
FJ: 4, 3, 2, 1
농부 존의 지시에 귀를 기울이는 소는 소 뿐이다. 그가 소 에게 줄에서 걸음 이동하라고 지시하면 순서는 다음과 같이 된다.
FJ: 3, 2, 4, 1
이제 농부 존의 지시에 귀를 기울이는 소는 소 이므로, 두 번째 시간 단계에서는 소 에게 지시를 내릴 수 있고, 소들이 정렬될 때까지 이 과정을 반복한다.
농부 존은 정렬을 빨리 끝내고 자신의 아침 식사를 위해 농가로 돌아가고 싶어 한다. 소들을 최소 시간 단계로 정렬하는 지시 순서를 찾도록 도와주자.
입력
첫째 줄에 이 주어진다. 둘째 줄에 개의 정수 가 공백으로 구분되어 주어지며, 이는 소들의 시작 순서를 나타낸다.
출력
첫째 줄에는 소들을 정렬하는 데 필요한 최소 시간 단계 수 를 출력한다.
둘째 줄에는 개의 정수 를 공백으로 구분하여 출력하며, 각 값은 범위에 속한다. 또한 번째 시간 단계에서 농부 존이 마주 보고 있는 소에게 줄에서 걸음 이동하라고 지시했을 때, 번의 시간 단계 후에 소들이 정렬된 순서가 되어야 한다.
최적의 지시 순서가 여러 개라면 그중 아무거나 출력해도 된다.