문제
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
입력
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.
import java.util.Scanner;
// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
public static void main(String[] args) {
int number;
int[] numberArry = new int[10];
Scanner scn = new Scanner(System.in);
number = scn.nextInt();
if (number>=1 && number <=10){
numberArry[0] = number;
}else if(number>10 && number <=100){
}else if(number>100 && number <=1000){
}else if(number>10000 && number <=100000){
}else if(number>100000 && number <=1000000){
}else if(number >1000000 && number <=10000000){
}else if(number >10000000 && number <=100000000){
}else if(number >100000000 && number <=1000000000){
}
}
}
정말..부끄럽군... 하지만 실패는 두려워하면 성장할 수없다.. 그래도 좀 부끄럽다.. 코테 시간을 2시간 반을 줬는데 두 개 다 구현에 실패했다. 시간이 부족해 코드는 작성하다가 중간에 멈췄다.
내가 생각한 알고리즘은 다음과 같다.
만약 10000단위의 정수가 입력 버퍼에 들어온다면. 해당 값을 10000으로 나누면 첫번째자리를 알 수 있을 것이다. 이를 intAarray의 0번째 인덱스에 입력한다. 이후 1000으로 나누면 두번째자리를 알 수 있을 것이다. 이를 intArray의 1버너째 인덱스에 입력한다. 이를 반복하는 for문을 작성한다.
이를 팀원들에게 발표했는데 팀원들이 위의 방식으로 코드가 돌아갈거 같다고는 했다. 하지만, String이 제공하는 강력한 메서드를 사용하면 더 쉽고, 더 빠르고, 더 가벼운 프로그램을 작성 할 수 있다고 했다.
방식은 입력 버퍼에 들어온 값을 String으로 받는다. 그 후 StringTokenizer를이용하여 각각 인덱스를 쪼개서 intArray의배열에 넣어준다. 그 후 Array.sort() 메서드를 이용하여 재정렬 해준다. 그럼 내림차순이 아닌 오름차순으로 정렬된다.
이때 한 팀원이 기막힌 아이디어를 냈다.
for(i = intArray.length(); i<=0; i-)의 조건으로 돌려버리면 그냥 뒤에서 부터 뽑기때문에 내림차순으로 다시정렬할 필요 없이 오름차순으로 출력값을낸다.
실패한 코드는 반드시 복수하러 오겠다.