코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.

문제 정보

문제

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한사항

  • n은 1이상 8000000000 이하인 자연수입니다.

입출력 예

n return
118372 873211

풀이 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.ArrayList;

class Solution {
    public long solution(long n) {
        
        String s = Long.toString(n);
        ArrayList<String> answerList = new ArrayList<String>();
        
        for (String st : s.split("")){
            if (answerList.size() == 0){
                answerList.add(st);
            }else{
                for (int i=0; i <= answerList.size(); i++){
                    if (i == answerList.size()){
                        answerList.add(st);
                        break;
                    }else if (Long.valueOf(st) < Long.valueOf(answerList.get(i))){
                        continue;
                    }else if (Long.valueOf(st) >= Long.valueOf(answerList.get(i))){
                        answerList.add(i, st);
                        break;
                    }
                }
            }
        }
        
        long answer = Long.valueOf(String.join("", answerList));
        return answer;
    }
}

풀이 방식

– 정답을 담을 빈 ArrayList 배열을 만든다.
– 입력받은 String 타입의 숫자 배열을 split으로 나눠 리스트 형태로 바꾼다.
– 이 리스트를 1차 for 문을 돌리면서 숫자 하나 하나마다 배치될 위치를 찾는다.
– 가장 첫 숫자를 정답 ArrayList 배열 안에 넣는다.
– 안쪽에 for 문을 하나 더 둬서 정답 ArrayList를 돌면서 새로운 숫자와 기존 정답 배열에 담겨있는 숫자의 크기를 비교한다.
– 새로운 숫자가 기존의 숫자보다 크거나 같으면 새로운 숫자를 정답 배열의 해당 위치에 추가한다.
– 새로운 숫자가 기존의 숫자보다 작다면 다음 정답 배열 숫자와 비교한다.
– 새로운 숫자를 정답 배열의 마지막 숫자와 까지 비교를 했다면 새로운 숫자를 정답 배열의 가장 마지막에 넣는다.