[Java] 백준 1427번 소트인사이드

xyzw·2023년 3월 13일
0

algorithm

목록 보기
2/12

문제

배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.

입력

첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.


풀이

N을 한 자리씩 쪼개서 정렬한다. 예를 들어, N=123일 때, 1, 2, 3을 정렬하면 된다.
이를 위해서 N을 문자열로 바꾸는 방법을 이용한다.

입력값을 문자열로 바꾸기

Integer number = sc.nextInt();
String str = number.toString();

문자열을 한 자리씩 쪼개기

Integer.parseInt(str.substring(i,i+1))

리스트에 쪼갠 문자열을 넣기

List<Integer> list = new ArrayList<>();

for(int i=0; i<str.length(); i++){
	list.add(Integer.parseInt(str.substring(i,i+1)));
}

리스트를 오름차순으로 정렬하기

list.sort(Comparator.naturalOrder());

각 자릿수에 10의 거듭제곱을 곱해서 모두 더하기

for(int i=0; i<list.size(); i++){
	answer += (int)(list.get(i)*Math.pow(10, i));
}
  • Math.pow(double a, double b)
    a의 b제곱을 double 형으로 반환한다.

  • 리스트를 내림차순으로 정렬하면, 10의 거듭제곱을 곱할 때 Math.pow(10, list.size()-i-1)로 작성하면 된다.

전체 코드

import java.util.*;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc = new Scanner(System.in);
		
		Integer number = sc.nextInt();
		String str = number.toString();
		
		Integer answer = 0;
        
        List<Integer> list = new ArrayList<>();

        for(int i=0; i<str.length(); i++){
            list.add(Integer.parseInt(str.substring(i,i+1)));
        }

        list.sort(Comparator.naturalOrder());

        for(int i=0; i<list.size(); i++){
            answer += (int)(list.get(i)*Math.pow(10, i));
        }
        
        System.out.println(answer);
	}

}

0개의 댓글