만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

완벽한 순열 2

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

요약
순열 P가 주어질 때, 0에서 Q를 반복 적용하면 모든 인덱스를 한 번씩 방문하게 되는 순열 Q 중 P와 다른 위치가 가장 적은 것을 찾는다.
난이도

보통10점 중 7점

유형
조합론, 그리디, 수학, 구현
정답자
아직 제출이 없습니다

문제

0부터 N-1까지의 모든 정수를 정확히 한 번씩 포함하는 순열 A가 있다. A로부터 같은 길이의 배열 B를 다음과 같이 만든다.

  1. B[0] = 0
  2. B[i] = A[B[i-1]] (1 ≤ i ≤ N-1)

이렇게 얻은 B도 순열이면 A를 완벽한 순열이라고 부른다.

다음 표는 길이가 3인 모든 순열 A와 그 자식 배열 B를 보여 준다. {1, 2, 0}과 {2, 0, 1}은 B도 순열이므로 완벽한 순열이다.

AB
0, 1, 20, 0, 0
0, 2, 10, 0, 0
1, 0, 20, 1, 0
1, 2, 00, 1, 2
2, 0, 10, 2, 1
2, 1, 00, 2, 0

길이가 N인 순열 P가 주어진다. P와 차이가 가장 작은 완벽한 순열 Q를 출력하라. 두 순열의 차이는 P[i]와 Q[i]가 서로 다른 인덱스 i의 개수이다.

입력

첫째 줄에 순열의 크기 N (1 ≤ N ≤ 50)이 주어진다. 둘째 줄에 N개의 정수로 순열 P[0], P[1], ..., P[N-1]이 공백으로 구분되어 주어진다.

출력

P와의 차이가 최소인 완벽한 순열 Q를 한 줄에 출력한다. 그런 Q가 여러 개라면, Q의 자식 배열 B가 사전순으로 가장 앞서는 Q를 출력한다.

예제6

  1. 예제 1

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

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

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

    입력
    13
    11 8 10 1 5 4 0 7 3 9 12 6 2
    
    예상 출력
    1 8 10 2 5 7 0 9 3 11 12 6 4
    
  5. 예제 5

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

    입력
    8
    0 2 6 5 7 3 1 4
    
    예상 출력
    1 2 6 5 7 4 3 0