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

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

열 정렬정렬 정

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

요약
서로 다른 정수로 이루어진 배열을 오름차순으로 만들기 위해 두 값을 맞바꾸는 연산의 최소 횟수를 구한다.
난이도

보통10점 중 5점

유형
배열, 해시맵, 그리디
정답자
아직 제출이 없습니다

문제

열정이 가득한 김정렬은 항상 배열을 오름차순 정렬하려고 하는 강박증이 있다.

하지만 너무 열정적으로 정렬한 나머지 제대로 정렬하지 못하는 경우가 생긴다.

김정렬의 친구로서, 정렬이가 눈치채기 전에 다시 정렬시켜주려고 한다. 하지만 배열을 너무 많이 바꿀 경우 정렬이가 눈치를 채게 되고, 정렬이는 낙담할 것이다.

우리가 배열에 적용할 수 있는 연산은 임의의 두 값을 뽑아서 서로 교환하는 것이다. 정렬이 몰래 정렬하기 위해 최소한으로 필요한 연산 횟수를 구하자.

입력

첫 번째 줄에 배열의 크기 N(4≤N​≤100,000)N(4 ≤ N​ ≤ 100\\,000)이 주어진다.

그다음 줄에 배열의 원소 A_1,A_2,⋯ ,A_n(−109≤A_i≤109,i≠jA\_1, A\_2, \cdots, A\_n (-10^9 ≤ A\_i ≤ 10^9, i \neq j 이면 A_i≠A_j) A\_i \neq A\_j ) 이 주어진다.

배열의 원소는 모두 정수이다.

출력

배열에 적용할 최소 연산 횟수를 출력한다.

예제3

  1. 예제 1

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

    입력
    7
    1 300 2 9012 3 400 0
    
    예상 출력
    4
    
  3. 예제 3

    입력
    15
    86 30 24 13 82 62 85 27 11 55 97 39 81 41 63
    
    예상 출력
    13