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

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

선택 정렬의 이동 거리

면접 대비

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

요약
순열에 선택 정렬을 적용할 때 각 값이 이동한 거리의 합을 구해 출력한다.
난이도

보통10점 중 5점

유형
배열, 정렬, 시뮬레이션
정답자
아직 제출이 없습니다

문제

11부터 NN까지의 정수가 한 번씩 등장하는 수열 AA가 주어진다. 이 수열에서 선택 정렬 알고리즘을 수행할 때, 각 수의 이동 거리를 출력하라.

선택 정렬 알고리즘이 무엇인지 잘 모르는 친구들은 친절한 주원이가 준비한 아래 설명을 읽어보도록 하자.

  • 길이가 NN인 수열 A=\left\\{ A\_1,A\_2,\cdots ,A\_N \right\\}을 오름차순으로 정렬하는 선택 정렬 알고리즘은 아래 동작을 N−1N-1번 반복해서 수행한다.

    1. 지금이 ii번째 동작이라면, A_i,A_i+1,⋯ ,A_NA\_i,A\_{i+1},\cdots ,A\_N 중 최솟값 A_jA\_j를 찾는다.
    2. A_iA\_i와 A_jA\_j의 위치를 교환한다. 이때 A_iA\_i와 A_jA\_j의 이동 거리가 각각 (j−i)(j-i)만큼 증가한다.

예를 들어 \left\\{ 1,3,5,2,4 \right\\}와 같은 수열이 주어졌다고 하자. 처음에 모든 수의 이동 거리는 00으로 같다. 선택 정렬 알고리즘은 다음과 같은 과정을 거쳐 수행된다.

  1. A_1=1A\_1=1과 A_1=1A\_1=1을 교환해서 \left\\{ 1,3,5,2,4 \right\\}가 된다. 이때 11의 이동 거리는 00만큼 증가한다.
  2. A_2=3A\_2=3과 A_4=2A\_4=2를 교환해서 \left\\{ 1,2,5,3,4 \right\\}가 된다. 이때 22와 33의 이동 거리는 22만큼 증가한다.
  3. A_3=5A\_3=5와 A_4=3A\_4=3을 교환해서 \left\\{ 1,2,3,5,4 \right\\}가 된다. 이때 33과 55의 이동 거리는 11만큼 증가한다.
  4. A_4=5A\_4=5와 A_5=4A\_5=4를 교환해서 \left\\{ 1,2,3,4,5 \right\\}가 된다. 이때 44와 55의 이동 거리는 11만큼 증가한다.

따라서 11은 00만큼, 22는 22만큼, 33은 33만큼, 44는 11만큼, 55는 22만큼 이동한다.

입력

첫째 줄에 수열의 길이 NN이 주어진다.

둘째 줄에 수열의 원소 A_1,A_2,⋯ ,A_NA\_1,A\_2,\cdots ,A\_N이 차례대로 공백으로 구분되어 주어진다.

출력

첫째 줄에 NN개의 정수를 공백으로 구분하여 출력한다. ii번째 정수는 ii의 이동 거리를 의미한다.

제한

  • 1≤N≤5×1051\leq N\leq 5\times 10^5
  • AA에는 11부터 NN까지의 정수가 정확히 한 번씩 등장한다.

예제2

  1. 예제 1

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

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