Study/Baekjoon
Baekjoon1427: 소트인사이드, System.in.read();
devyoseph
2021. 11. 5. 02:04
소트인사이드
시간 제한메모리 제한제출정답맞은 사람정답 비율
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);
}}