빠에야는 개발중

Minimum Swaps 2 본문

공부/알고리즘 문제

Minimum Swaps 2

빠에야좋아 2019. 4. 8. 23:19

생각했던 것

어떤 방식으로 하든 어쨌든 정렬인 문제다. 정렬 중 가장 빠른 정렬은 역시 퀵 정렬이기 때문에 퀵 정렬을 구현해서 스왑할때마다 카운트를 해주자!

웃기고 있네

너무나 당연하게도 퀵 정렬은 최악의 경우에 O(n^2)의 시간복잡도를 보여준다. 따라서 퀵정렬은 항상 가장 적은 swap 수를 보장해주지 못한다. 차라리 합병정렬을 하면 몰라… 그래서 어떻게 할것인가?

직관적으로 가보자

첫번째 원소부터 순차적으로 검사해서 해당 인덱스 i에서의 값이 i+1이 아니라면 원래 그 값이 있어야 할 위치와 바꿔준다. 즉 수식으로 나타내면 arr[i] != i+1 이면 swap(arr[i], arr[arr[i] - 1]) 인 것이다.

결과

맞았다… 이렇게 직관적으로 풀 문제였는데 괜히 돌아가려다가 망했다. 돌아갈거면 잘 돌아갔어야 했는데… 더 공부해야겠다.

 

'공부 > 알고리즘 문제' 카테고리의 다른 글

Frequency Queries  (0) 2019.04.16
Array Manipulation  (0) 2019.04.09
New Year Chaos  (0) 2019.04.02
Jumping on the Clouds  (0) 2019.03.29
단순 연결리스트 역순으로 뒤집기  (0) 2018.04.02
Comments