수가 주어지면 그 수의 각 자릿수를 내림차순으로 정렬하시오.
1번째 줄에 정렬할 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수다.
1반째 줄에 자릿수를 내림차순 정렬한 수를 출력한다.
예제 입력
2134
예제 출력
4321
1단계
- 문제 분석하기먼저 숫자를 각 자릿수별로 나눌 필요가 있다. 나머지 연산으로 분리할 수도 있지만 여기선 입력값을 String으로 받은 후 substring() 함수를 이용해 자릿수를 분리하고, 이를 int형으로 변경해 배열에 저장하자. 그 다음에는 단순하게 배열을 정렬하면 된다.
2단계
- 손으로 풀어 보기1
String 변수로 정렬할 데이터를 받아 int형 배열에 저장한다. 이때는 substring() 함수를 사용해 숫자를 각 자릿수별로 나눈 후 배열에 저장한다.
2
배열의 데이터를 선택 정렬 알고리즘을 이용해 내림차순 정렬한다.
3단계
- sudo코드 작성하기str(정렬한 수)
A(자릿수별로 구분해 저장한 배열)
for(str의 길이만큼 반복) {
A배열 저장 -> str.substring 사용
}
for(i : 0 ~ str의 길이) {
for(j : i + 1 ~ str의 길이) {
현재 범위에서 Max값 찾기
}
현재 i값과 Max값 중 Max값이 더 크면 swap 수행
}
A배열 출력
4단계
- 코드 구현하기import java.util.Scanner;
public class Q17 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
int[] A = new int[str.length()];
for(int i = 0; i < str.length(); i++){
A[i] = Integer.parseInt(str.substring(i, i+1));
}
for(int i = 0; i < str.length(); i++){
int Max = i;
for(int j = i + 1; j < str.length(); j++){
if(A[j] > A[Max]){
Max = j;
}
}
if(A[i] < A[Max]){
int tmp = A[i];
A[i] = A[Max];
A[Max] = tmp;
}
}
for(int i = 0; i < str.length(); i++){
System.out.print(A[i]);
}
}
}
- Do it! 알고리즘 코딩테스트 자바 편