소트인사이드
시간 제한메모리 제한제출정답맞은 사람정답 비율
2 초 | 128 MB | 43447 | 26601 | 22398 | 61.682% |
문제
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
입력
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.
풀이
숫자 크기에 명백한 제한이 있을 때 카운팅 정렬을 생각하게 된다. 각 자리수의 경우 0~9까지 수의 범위는 제한적이다. 10크기의 카운팅 배열을 만들고 숫자에 해당하는 index에 값을 추가해 9부터 0까지 출력한다
Arrays.sort 등을 사용해 코드 길이를 줄일 수 있지만 이번에는 System.in.read()를 통해 풀이했다. N을 입력하지 않기 때문에 하나씩 숫자를 가져와서 비교하기 위해 사용했다.
System.in.read(), char 사용
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
int[] count = new int[10];
for(int i=0; i<10;i++) {
int j=Character.getNumericValue(System.in.read()); //System.in.read를 통해 하나씩
if(j!=-1)count[j]++; //값이 비어있을 때 -1을 반환하는데 아닌 값들만 가져온다
else i=10; //-1인 순간 반복문을 종료한다
}
for(int i=9;i>-1;i--)
for(int j=0;j<count[i];j++) //카운팅 정렬
System.out.print(i);
}}
System.in.read(), int 사용
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
int[] count = new int[10];
for(int i=0; i<10;i++) {
int j=System.in.read()-48; //아스키 코드 한자리 숫자에서 48을 빼면 된다
if(j>-1)count[j]++;else i=10;
}
for(int i=9;i>-1;i--)for(int j=0;j<count[i];j++)System.out.print(i);
}}
'Study > Baekjoon' 카테고리의 다른 글
Baekjoon1181: 단어 정렬 (0) | 2021.11.08 |
---|---|
Baekjoon11650,11651: 좌표 정렬하기 (0) | 2021.11.06 |
Baekjoon10989: 수 정렬하기 3, 카운팅 정렬 (0) | 2021.11.04 |
Baekjoon2750,2751: 수 정렬하기(Scanner, Buffer) (0) | 2021.11.03 |
Baekjoon13305*: 주유소 (0) | 2021.11.02 |