Java/Algorithm

[Java-Algorithm] HackerRank Java Minimum Swaps 2 풀이

Jeong Jeon
반응형

1). 문제 : www.hackerrank.com/challenges/minimum-swaps-2

 

Minimum Swaps 2 | HackerRank

Return the minimum number of swaps to sort the given array.

www.hackerrank.com

2). 풀이 :

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

public class Solution {
    //몇번의 스왑으로 순서대로 할수있는지 횟수 출력
    // Complete the minimumSwaps function below.
    static int minimumSwaps(int[] arr) {

        int cnt = 0;
        int temp = 0;//값을 담아놓을 Tmp
        int idx = 0;//index Tmp
        
        for(int i=0; i<arr.length; i++){       
            if(arr[i]!=(i+1)){
                for(int j=i+1; j<arr.length; j++){
                    //우리가 찾아야 될 위치를 구해놓는다.
                    if(arr[j]==(i+1)){
                        idx = j;
                        break;
                    }
                }
                temp = arr[i];
                arr[i] = arr[idx];
                arr[idx] = temp;
                cnt++;
            }
            
        }
        return cnt;
    }

    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int n = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        int[] arr = new int[n];

        String[] arrItems = scanner.nextLine().split(" ");
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        for (int i = 0; i < n; i++) {
            int arrItem = Integer.parseInt(arrItems[i]);
            arr[i] = arrItem;
        }

        int res = minimumSwaps(arr);

        bufferedWriter.write(String.valueOf(res));
        bufferedWriter.newLine();

        bufferedWriter.close();

        scanner.close();
    }
}

선택정렬을 사용하여 알고리즘을 풀었다.

알고리즘 공부를 안했어서, 엄청 헤맸다...

 

우선 숫자가 연속되고, 1부터 시작된다는 것에서 부터 시작.

해당 index+1에는 해당 숫자가 들어와야된다.

 

그래서 해당index+1에 해당 숫자를 매칭시켜 아니면 찾는것으로 알고리즘을 풀어내었다.

갈길이 멀다.

반응형