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);
}}

 

 

17번째... Arrays.sort의 장벽은 높았다