아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

주차 타워

면접 대비

시간 제한1.5초메모리 제한1024 MB

요약
원형 주차 타워에 놓인 N대의 차를 아래쪽 출구로 옮겨 차 번호가 작은 순서대로 빼야 하며, 시계방향 또는 반시계방향 회전 버튼을 누른 총 횟수의 최솟값을 구한다.
난이도

보통10점 중 6점

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

문제

원형의 주차 타워가 있다. 주차 타워에는 NN개의 칸이 원형으로 있다. 각 칸은 시계 방향으로 차례대로 11번째, 22번째, …\dots, NN번째 칸으로 부른다. 각 칸에는 차가 한 대씩 들어있다. ii번째 칸에 있는 차는 번호 a_ia\_i를 가지고 있다.

주차 타워에는 두 개의 버튼이 있다. 버튼 A를 누르면 주차 타워를 시계방향으로, 버튼 B를 누르면 주차 타워를 반시계방향으로 한 칸 회전할 수 있다. 아래에 있는 왼쪽 그림은 위 예시에서 버튼 A를, 오른쪽 그림은 버튼 B를 누른 다음의 상태를 나타낸다.

이 때, 주차 타워에서 모든 차를 빼려 한다.

맨 아래에 있는 한 개의 칸에서만 차를 뺄 수 있다. 초기 상태에는 11번째 칸이 맨 아래에 있다. 맨 아래에 있지 않은 칸에 있는 차를 빼기 위해서는, 먼저 버튼을 적절히 눌러서 주차 타워를 회전해, 차가 있는 칸을 맨 아래로 옮겨야 한다.

추가적으로, 번호 xx를 가진 차를 빼기 위해서는 먼저 번호가 xx보다 작은 모든 차를 먼저 빼어야 한다. 즉, 주차 타워에 번호가 xx 미만인 차가 남아 있다면, 번호가 xx인 차를 뺄 수 없다.

주차 타워에서 모든 차를 빼기 위해, 버튼을 눌러야 하는 총 횟수의 최솟값을 구하는 프로그램을 작성하여라.

입력

첫 번째 줄에 정수 NN이 주어진다.

두 번째 줄에 차들의 번호 a_1,…,a_Na\_1, \dots , a\_N이 순서대로 공백을 사이에 두고 주어진다.

출력

첫 번째 줄에 버튼을 눌러야 하는 총 횟수의 최솟값을 출력하라.

제한

  • 1≤N≤100,0001 ≤ N ≤ 100,000
  • 1≤a_i≤1,000,000,0001 ≤ a\_i ≤ 1,000,000,000

예제2

  1. 예제 1

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

    입력
    5
    3 1 4 5 1
    
    예상 출력
    7