알고리즘
[백준] 1427번 : 소트인사이드 _ JAVA ( 주석 설명 ) 본문
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); //내림차순로 정렬된 수를 출력한다.
}
}
'백준 - JAVA > 정렬' 카테고리의 다른 글
[백준] 11651번 : 좌표 정렬하기 2 _ JAVA ( 주석 설명 ) (0) | 2023.02.09 |
---|---|
[백준] 11650번 : 좌표 정렬하기 _ JAVA ( 주석 설명 ) (0) | 2023.02.09 |
[백준] 2108번 : 통계학 _ JAVA ( 주석 설명 ) (0) | 2023.02.07 |
[백준] 10989번 : 수 정렬하기 3 _ JAVA ( 주석 설명 ) (0) | 2023.02.07 |
[백준] 2751번 : 수 정렬하기 2 _ JAVA ( 주석 설명 ) (0) | 2023.02.07 |