만드는 중입니다

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

열차 차량 재정렬

면접 대비

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

요약
각 테스트 케이스에서 1부터 L까지의 순열에 대한 역수(반전)의 개수를 세어, 기차를 정렬하는 데 필요한 인접 교환의 최소 횟수를 구한다.
난이도

쉬움10점 중 3점

유형
배열, 정렬, 수학, 완전 탐색
정답자
아직 제출이 없습니다

문제

오래된 기차역에 가면 마지막까지 남아 있는 "차량 교환원" 중 한 명을 아직도 만날 수 있습니다. 차량 교환원은 기차의 차량 순서를 다시 배열하는 일만 하는 철도 직원입니다.

차량이 알맞은 순서로 정렬되면, 기관사는 각 화물이 향하는 역에서 차량을 하나씩 떼어 놓기만 하면 됩니다.

"차량 교환원"이라는 이름은 이 일을 처음 한 사람에게서 유래했습니다. 그는 철교 옆 역에서 일했는데, 이 다리는 위로 열리는 대신 강 한가운데 기둥을 축으로 회전했습니다. 90도 회전하면 배가 양옆으로 지나갈 수 있었습니다. 첫 번째 차량 교환원은 이 다리 위에 차량을 최대 두 대까지 올려 조작할 수 있음을 발견했습니다. 다리를 180도 돌리면 그 두 차량의 자리가 서로 바뀌어 기차를 다시 배열할 수 있었습니다. (그 결과 차량의 방향이 반대가 되지만, 차량은 어느 방향으로도 잘 달리므로 상관없습니다.)

이제 차량 교환원이 거의 사라졌기에, 철도 회사는 이 작업을 자동화하려 합니다. 프로그램의 일부는 주어진 기차에 대해 인접한 두 차량을 교환하는 연산을 최소 몇 번 해야 기차를 정렬할 수 있는지 판단해야 합니다. 순열을 정렬하는 데 필요한 인접 교환의 최소 횟수는 그 순열의 반전(inversion) 수, 즉 현재 서로 잘못된 순서로 놓인 차량 쌍의 개수와 같습니다.

질문:

  1. 기차 TT에 대해 m[T]m[T]를 TT를 정렬하는 데 필요한 최소 교환 횟수라고 합시다. 차량이 LL개인 기차에서 m[T]m[T]가 가질 수 있는 가장 큰 값은 무엇일까요? (기차가 완전히 뒤집혀 있을 때 도달하는 L(L−1)/2L(L-1)/2입니다.)
  2. 아래 명세를 만족하는 프로그램을 작성하세요.

입력

첫 번째 줄에 테스트 케이스의 수 NN이 주어집니다.

각 테스트 케이스는 두 줄로 이루어집니다.

  • 첫 번째 줄에는 기차의 길이를 나타내는 정수 LL이 주어집니다 (0≤L≤500 \le L \le 50).
  • 두 번째 줄에는 11부터 LL까지의 수를 한 번씩 포함하는 순열이 주어지며, 이는 차량의 현재 순서를 나타냅니다. 차량은 11번이 맨 앞, 그다음 22번, 이렇게 이어져 LL번이 맨 뒤에 오도록 정렬되어야 합니다.

출력

각 테스트 케이스마다 다음 문장을 출력하세요.

Optimal train swapping takes S swaps.

여기서 SS는 그 기차를 정렬하는 데 필요한 최소 교환 횟수입니다.

예제3

  1. 예제 1

    입력
    3
    3
    1 3 2
    4
    4 3 2 1
    2
    2 1
    
    예상 출력
    Optimal train swapping takes 1 swaps.
    Optimal train swapping takes 6 swaps.
    Optimal train swapping takes 1 swaps.
    
  2. 예제 2

    입력
    1
    5
    1 2 3 4 5
    
    예상 출력
    Optimal train swapping takes 0 swaps.
    
  3. 예제 3

    입력
    1
    1
    1
    
    예상 출력
    Optimal train swapping takes 0 swaps.