본문 바로가기

공부/예제 풀이

백준 1427번(실패)

문제

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

 

입력

첫째 줄에 정렬하려고 하는 수 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-)의 조건으로 돌려버리면 그냥 뒤에서 부터 뽑기때문에 내림차순으로 다시정렬할 필요 없이 오름차순으로 출력값을낸다.

 

실패한 코드는 반드시 복수하러 오겠다. 

'공부 > 예제 풀이' 카테고리의 다른 글

백준 11650  (0) 2023.10.24
백준 1676  (0) 2023.10.20
백준 10814번 (실패)  (0) 2023.10.18
계산기 프로그래밍  (0) 2023.10.17
2주차 숙제  (0) 2023.10.14