

처음 문제를 읽었을 때는 쉬워보이는데 정답 비율이 왜 이렇게 낮지?라는 생각이 들었다.
그리고 버블소트로 풀어보니 역시나 시간초과가 나왔다.
버블소트는 시간복잡도가 O(N^2)인데, 최대 500,000개의 수가 주어지니 그럴 만했다.
swap횟수는 병합정렬을 하는 과정에 뒤쪽에 있던 인덱스가 앞으로 이동한 만큼 더해주면 된다.
import java.io.*;
import java.util.*;
public class Main{
    static long cnt = 0;
    static long[] sorted;
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        
        long[] arr = new long[n];
        sorted = new long[n];
        
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        for(int i=0;i<n;i++){
            arr[i] = Long.parseLong(st.nextToken());
        }
        
        mergeSort(arr, 0, n-1);
        
        System.out.println(cnt);
        
    }
    
    static void mergeSort(long[] arr,int low, int high){
        if(low<high){
            int mid =(low+high)/2;
            mergeSort(arr, low, mid);
            mergeSort(arr, mid+1, high);
            merge(arr, low, mid, high);
        }
    }
    
    static void merge(long[] arr, int low, int mid, int high){
        int l = low;
        int r = mid+1;
        int idx = low;
        
        while(l <= mid && r <= high){
            if(arr[l]<=arr[r]){
                sorted[idx++] = arr[l++];
            }
            else{
                sorted[idx++] = arr[r++];
                cnt += (r-idx);
            }
        }
        
        
        while(r<=high){
            sorted[idx++] = arr[r++];
        }
        
        
        while(l<=mid){
           sorted[idx++] = arr[l++];
        }
        for(int i=low;i<=high;i++){
            arr[i] = sorted[i];
        }
    }
}'Algorithm > [BOJ] - JAVA' 카테고리의 다른 글
| [백준] 6549 : 히스토그램에서 가장 큰 직사각형 JAVA 풀이 (0) | 2022.09.15 | 
|---|---|
| [백준] 2630 : 색종이 만들기 JAVA 풀이 (0) | 2022.09.13 | 
| [백준] 2448 : 별 찍기 - 11 JAVA 풀이 (0) | 2022.09.12 | 
| [백준] 1992 : 쿼드트리 JAVA 풀이 (0) | 2022.09.10 | 
| [백준] 1780 : 종이의 개수 JAVA 풀이 (0) | 2022.09.10 | 
 
									
								 
									
								 
									
								