졸린 소 정렬

면접 대비

시간 제한2초메모리 제한512 MB

요약
맨 앞 소를 뒤쪽 임의의 위치로 옮기는 연산만으로 순열을 정렬하는 최소 이동 횟수와 각 이동 크기를 구한다.
난이도

보통10점 중 6점

유형
배열, 그리디, 정렬, 구현
정답자
아직 제출이 없습니다

문제

농부 존은 NN마리의 소(1≤N≤1051 \leq N \leq 10^5)를 아침 식사를 위해 목초지로 나가기 전에 정렬하려고 한다. 소에게는 편의상 1…N1 \dots N의 번호가 붙어 있다.

현재 소들은 p_1,p_2,p_3,…,p_Np\_1, p\_2, p\_3, \dots, p\_N의 순서로 한 줄로 서 있고, 농부 존은 소 p_1p\_1 앞에 서 있다. 그는 소들을 1,2,3,…,N1, 2, 3, \dots, N의 순서로, 즉 소 11이 농부 존 옆에 오도록 재배치하려고 한다.

오늘 소들은 조금 졸려서, 어느 시점이든 농부 존의 지시에 귀를 기울이는 소는 농부 존과 마주 보고 있는 소 한 마리뿐이다. 한 시간 단계에서 그는 이 소에게 줄에서 kk걸음만큼 이동하라고 지시할 수 있으며, kk는 11 이상 N−1N-1 이하의 임의의 정수이다. 그 소가 지나치는 kk마리의 소는 앞으로 비켜서서 그 소가 그들 뒤에 들어갈 자리를 만든다.

예를 들어 N=4N=4이고 소들이 다음과 같은 순서로 시작한다고 하자.

FJ: 4, 3, 2, 1

농부 존의 지시에 귀를 기울이는 소는 소 44뿐이다. 그가 소 44에게 줄에서 22걸음 이동하라고 지시하면 순서는 다음과 같이 된다.

FJ: 3, 2, 4, 1

이제 농부 존의 지시에 귀를 기울이는 소는 소 33이므로, 두 번째 시간 단계에서는 소 33에게 지시를 내릴 수 있고, 소들이 정렬될 때까지 이 과정을 반복한다.

농부 존은 정렬을 빨리 끝내고 자신의 아침 식사를 위해 농가로 돌아가고 싶어 한다. 소들을 최소 시간 단계로 정렬하는 지시 순서를 찾도록 도와주자.

입력

첫째 줄에 NN이 주어진다. 둘째 줄에 NN개의 정수 p_1,p_2,p_3,…,p_Np\_1, p\_2, p\_3, \dots, p\_N가 공백으로 구분되어 주어지며, 이는 소들의 시작 순서를 나타낸다.

출력

첫째 줄에는 소들을 정렬하는 데 필요한 최소 시간 단계 수 KK를 출력한다.

둘째 줄에는 KK개의 정수 c_1,c_2,…,c_Kc\_1, c\_2, \dots, c\_K를 공백으로 구분하여 출력하며, 각 값은 1…N−11 \ldots N-1 범위에 속한다. 또한 ii번째 시간 단계에서 농부 존이 마주 보고 있는 소에게 줄에서 c_ic\_i걸음 이동하라고 지시했을 때, KK번의 시간 단계 후에 소들이 정렬된 순서가 되어야 한다.

최적의 지시 순서가 여러 개라면 그중 아무거나 출력해도 된다.

예제1

  1. 예제 1

    입력
    4
    1 2 4 3
    
    예상 출력
    3
    2 2 3