문제
My Code
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int[] testArray;
static int count;
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
int[] array = new int[N];
testArray = new int[N];
count = 0;
StringTokenizer st = new StringTokenizer(bf.readLine());
for(int i = 0; i<N; i++){
array[i] = Integer.parseInt(st.nextToken());
}
mergesort(array, 0, N-1);
System.out.println(count);
}
private static void mergesort(int[] arr, int left, int right) {
int mid;
if(left < right){
mid = (left+right)/2;
mergesort(arr, left, mid);
mergesort(arr, mid+1, right);
merge(arr, left, mid, right);
}
}
private static void merge(int[] arr, int left, int mid, int right) {
int i, j, k;
i = left;
j = mid+1;
k = left;
while (i <= mid && j <= right){
if (arr[i] <= arr[j]){
testArray[k++] = arr[i++];
}
else {
count += mid - i + 1;
testArray[k++] = arr[j++];
}
}
if (i > mid) {
for (int a = j; a <= right; a++) testArray[k++] = arr[a];
}
else{
for (int a = i; a <= mid; a++)testArray[k++] = arr[a];
}
for (int b = left; b <= right; b++){
arr[b] = testArray[b];
}
}
}
import java.util.StringTokenizer;
public class Main {
static int[] testArray;
static int count;
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
int[] array = new int[N];
testArray = new int[N];
count = 0;
StringTokenizer st = new StringTokenizer(bf.readLine());
for(int i = 0; i<N; i++){
array[i] = Integer.parseInt(st.nextToken());
}
mergesort(array, 0, N-1);
System.out.println(count);
}
private static void mergesort(int[] arr, int left, int right) {
int mid;
if(left < right){
mid = (left+right)/2;
mergesort(arr, left, mid);
mergesort(arr, mid+1, right);
merge(arr, left, mid, right);
}
}
private static void merge(int[] arr, int left, int mid, int right) {
int i, j, k;
i = left;
j = mid+1;
k = left;
while (i <= mid && j <= right){
if (arr[i] <= arr[j]){
testArray[k++] = arr[i++];
}
else {
count += mid - i + 1;
testArray[k++] = arr[j++];
}
}
if (i > mid) {
for (int a = j; a <= right; a++) testArray[k++] = arr[a];
}
else{
for (int a = i; a <= mid; a++)testArray[k++] = arr[a];
}
for (int b = left; b <= right; b++){
arr[b] = testArray[b];
}
}
}
'Java' 카테고리의 다른 글
[백준] 11724번 연결 요소의 개수 - DFS방식 / 재귀 함수 이용/ 무방향 그래프 (0) | 2023.09.01 |
---|---|
[Java] DFS 구현하기 - 재귀 함수 이용 / 인접 리스트 / 배열 (0) | 2023.08.31 |
[백준] 11004번 K번째 수 - 퀵정렬 / 오름차순 정렬 (0) | 2023.08.28 |
[백준] 11399번 ATM - 삽입정렬 / 오름차순 정렬 / 계산 (0) | 2023.08.26 |
[백준] 1427번 소트인사이드 - 내림차순 정렬 / 선택정렬 (1) | 2023.08.21 |