졸린 소 정렬

면접 대비

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

요약
1부터 N까지의 순열이 주어질 때 맨 앞 소를 임의 칸수만큼 뒤로 보내는 연산을 반복해서 정렬된 순서에 도달하는 최소 걸음 수를 구한다.
난이도

보통10점 중 5점

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

문제

농부 존은 소들이 아침 식사를 위해 목초지로 나가기 전에, NN마리(1≤N≤1001 \leq N \leq 100)의 소를 정렬하려고 한다. 소에게는 편의상 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는 1…N−11 \ldots N-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이 공백으로 구분되어 주어진다.

출력

농부 존이 최적으로 행동할 때, NN마리의 소가 정렬되기까지 걸리는 시간 단계 수를 나타내는 정수 하나를 출력한다.

예제1

  1. 예제 1

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