사용자 도구

사이트 도구


ps:problems:boj:25577

열 정렬정렬 정

ps
링크acmicpc.net/…
출처BOJ
문제 번호25577
문제명열 정렬정렬 정
레벨골드 4
분류

순열 사이클 분할

시간복잡도O(nlogn)
인풋사이즈n<=100000
사용한 언어Python 3.13
제출기록54360KB / 120ms
최고기록112ms
해결날짜2025/11/13

풀이

  • 중복값이 없는 수열을 정렬시키기 위한 최소 스왑 연산 횟수는 N - {순열사이클의 개수}이다 (정렬 (Sorting) 참고)
  • 수열을 좌표압축을 통해 순열로 변환하는데에 O(nlogn), 순열 사이클의 개수를 세는것은 O(n). 총 시간복잡도 O(nlogn)

코드

"""Solution code for "BOJ 25577. 열 정렬정렬 정".

- Problem link: https://www.acmicpc.net/problem/25577
- Solution link: http://www.teferi.net/ps/problems/boj/25577

Tags: [permutation cycle]
"""

from teflib import permcycle


def main():
    N = int(input())
    A = [int(x) for x in input().split()]

    compress_map = {x: i for i, x in enumerate(sorted(A))}
    perm = [compress_map[x] for x in A]
    answer = N - len(permcycle.permutation_cycles(perm))
    
    print(answer)


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
R T A R I
 
ps/problems/boj/25577.txt · 마지막으로 수정됨: 2025/11/13 07:40 저자 teferi