알고리즘

[백준] 1427번 : 소트인사이드 _ JAVA ( 주석 설명 ) 본문

백준 - JAVA/정렬

[백준] 1427번 : 소트인사이드 _ JAVA ( 주석 설명 )

wch_s 2023. 2. 7. 17:59

1번

→ Integer 배열 객체와 Arrays.sort() 를 이용한 내림차순 정렬

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;

public class Main {
    //시간 복잡도 : O(n(log(n))) ~ O(n^2)
    //공간 복잡도 : 수의 자릿수만큼의 배열 공간 필요
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //빠른 입력을 위해 버퍼를 이용해 입력을 받는다.
        StringBuilder sb = new StringBuilder(); //빠른 출력 위함

        int N = Integer.parseInt(br.readLine()); //수를 입력받는다.
        Integer[] ary = new Integer[Integer.toString(N).length()]; //수의 자릿수만큼의 배열 용량을 설정한다.

        for(int i=0;i<ary.length;++i){ //각 자릿수들을 ary 배열에 넣는다.
            ary[i] = N%10; //나머지
            N/=10; //나머지를 제외한 몫
        }

        //내림차순으로 정렬한다.
        //이 때 Collections.reverseOrder()를 사용하기 위해서는 ary 배열이 객체 타입의 배열이어야 한다.
        Arrays.sort(ary, Collections.reverseOrder());

        for(int i=0;i<ary.length;++i){
            sb.append(ary[i]); //내림차순 정렬을 한 값들을 StringBuilder에 저장한다.
        }

        System.out.println(sb); //내림차순 정렬한 수를 출력한다
    }
}

 


 

2번

→ Counting 정렬을 이용한 내림차순 정렬

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    //시간 복잡도 : O(N)
    //공간 복잡도 : 용량 10(0~9)의 배열 공간 필요
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //빠른 입력을 위해 버퍼를 이용해 입력을 받는다.
        StringBuilder sb = new StringBuilder(); //빠른 출력 위함

        int N = Integer.parseInt(br.readLine()); //수를 입력받는다.
        int[] ary = new int[10]; //수의 자릿수만큼의 배열 용량을 설정한다.

        while (N > 0) { //각 자릿수들 Counting 배열에 넣는다.
            ++ary[N % 10]; //나머지 인덱스에 +1 하기
            N /= 10; //나머지를 제외한 몫
        }

        for (int i = 9; i >= 0; --i) { //내림차순이므로 9부터 시작한다.
            while(ary[i]>=1){ //중복된 수도 모두 StringBuilder에 넣는다.
                sb.append(i);
                --ary[i];
            }
        }

        System.out.println(sb); //내림차순으로 정렬된 값을 출력한다.
    }
}

 


 

3번

→ toCharArray 입력 + Arrays.sort() 정렬을 이용한 내림차순 정렬

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    //시간 복잡도 : O(n(log(n))) ~ O(n^2)
    //공간 복잡도 : 용량 10(0~9)의 배열 공간 필요
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //빠른 입력을 위해 버퍼를 이용해 입력을 받는다.
        StringBuilder sb = new StringBuilder(); //빠른 출력 위함

        char[] char_ary = br.readLine().toCharArray(); //입력한 수를 곧바로 문자(char)로 나누어, char_ary에 각 인덱스별로 저장한다.

        Arrays.sort(char_ary); //char_ary를 오름차순으로 정렬한다.

        for(int i=char_ary.length-1;i>=0;--i){ //오름차순 정렬이었으므로 끝에서부터 반복을 시작한다.
            sb.append(char_ary[i]);
        }

        System.out.println(sb); //내림차순로 정렬된 수를 출력한다.
    }
}