반응형
1). 문제 : www.hackerrank.com/challenges/minimum-swaps-2
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에 해당 숫자를 매칭시켜 아니면 찾는것으로 알고리즘을 풀어내었다.
갈길이 멀다.
반응형
'Java > Algorithm' 카테고리의 다른 글
[Java-Algorithm] HackerRank Java - Array Manipulation -누적합풀이 (0) | 2021.01.27 |
---|---|
[Java-Algorithm] HackerRank Java - Mark and Toys 풀이 (0) | 2021.01.27 |
[Java-Algorithm] HackerRank Java New Year Chaos 풀이 (0) | 2021.01.26 |
[Java-Algorithm] HackerRank Java Arrays: Left Rotation 풀이 (0) | 2021.01.26 |
[Java-Algorithm] HackerRank Java 2D Array - DS 풀이 (0) | 2021.01.25 |