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()
- Dependency: teflib.permcycle.permutation_cycles
ps/problems/boj/25577.txt · 마지막으로 수정됨: 2025/11/13 07:40 저자 teferi

토론