주어진 수의 각 자리수를 내림차순으로 정렬하는 문제입니다.
좀 더 깔끔하게 풀 수 있지 않나 싶네요.
제가 푼 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args){
// 1427번 소트인사이드
Scanner sc = new Scanner(System.in);
int N= sc.nextInt();
int amount = (String.valueOf(N).split("")).length;
int[] arr = new int[amount];
for(int i=0;i<arr.length;i++){
arr[i]= N/(int)(Math.pow(10,amount-1));
N-= (arr[i]*(int)Math.pow(10,amount-1));
amount--;
}
int temp=0;
if(arr.length>0){
for(int i=0;i<arr.length;i++){
for(int j=0;j<i;j++){
if(arr[i]>arr[j]){
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
}
sc.close();
}
}
풀이과정
1. 정렬할 수를 int 변수 N으로 받습니다.
이 N의 자릿수를 구해 int amount에 받습니다.
정렬을 위한 int 1차원 배열 arr를 amount크기로 생성합니다.
2. 첫번째 반복문에선 N의 자릿수만큼 반복합니다.
각 자릿수만 뽑고싶으므로 저는 우선
N/(int)(Math.pow(10,amount-1));
*Math.pow(int a,int b)
a의 b제곱을 해주는 메소드 입니다.
반환값은 double
으로 N을 자릿수-1의 10제곱으로 나눈 몫을 arr에 차례로 담습니다.
다음 줄에서는 N에서 각 자릿수만큼 값을 빼줬습니다.
반복문이 돌면서 amount-- 가 수행되므로, 각 자릿수의 값만 담게 됩니다.
예) N이 2143이라면 arr엔 차례로 2, 1, 4, 3 이 담깁니다.
3. 이제 정렬을 할 차례입니다. 정렬 용도의 변수 temp를 만들고
버블정렬을 수행해 내림차순으로 정렬합니다.
4. 정렬된 arr를 출력하고 생성된 Scanner를 닫아줍니다.
'CodingTest > 백준' 카테고리의 다른 글
백준 1920번, 10815번-수 찾기, 숫자카드(JAVA) (0) | 2020.09.11 |
---|---|
백준 10814번 -나이순 정렬(JAVA) (0) | 2020.09.10 |
백준 1181번-단어 정렬(JAVA) (0) | 2020.09.10 |
백준 11650번, 11651번 -좌표 정렬하기(JAVA) (1) | 2020.09.08 |
백준 2750번- 수 정렬하기(JAVA) (0) | 2020.09.08 |