알고리즘(Algorithm)/프로그래머스(Programmers)

[프로그래머스] 정수 내림차순으로 배치하기 - JAVA

나아가는중 2021. 11. 1. 23:11
반응형

프로그래머스 정수 내림차순으로 배치하기 - JAVA


문제 설명

  1. 함수 solution은 정수 n을 매개변수로 입력받는다.
  2. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴.
    예를들어 n이 118372면 873211을 리턴.

제한 조건

  1. n은 1이상 8000000000 이하인 자연수.

문제 풀이 1

  1. n % 10 을 하여 일의 자리 수를 리스트에 추가.
  2. n /= 10 을 하여 n의 십의자리를 일의 자리로 만든다.
  3. 1 ~ 2 를 반복하여 n의 모든 자릿수를 리스트에 추가.
  4. 역순으로 정렬하여 큰것부터 작은 순으로 정렬.
  5. 리스트를 순회하며 정렬된 정수를 리턴.

소스 코드 1

import java.util.*;

class Solution {
    public long solution(long n) {
        long answer = 0;

        List<Integer> list = new ArrayList<>();
        while (n != 0) { // 3
            list.add((int)(n % 10)); // 1
            n /= 10; // 2
        }

        Collections.sort(list, Collections.reverseOrder()); // 4

        for (int t : list) { //5
            answer = (answer * 10) + t;
        }

        return answer;
    }
}

문제 풀이 2

  1. n의 각 자릿수를 문자열에 넣어 문자열 배열을 만든다.
    • char형이 아닌 string으로 만듬으로서 Collections.reverseOrder()를 사용하여 역순으로 정렬이 가능하다.
    • split("")를 수행하므로 각 자릿수로 문자열을 쪼깨어 문자열 배열을 만들 수 있다.
  2. 문자열 배열을 역순으로 정렬한다.
  3. 정렬된 문자열 배열을 하나의 문자열로 만든다.
  4. 3에서 만든 문자열을 Long형으로 변경한 뒤 리턴.

소스 코드 2

import java.util.*;

class Solution {
    public long solution(long n) {
        String[] arr = String.valueOf(n).split(""); // 1
        Arrays.sort(arr, Collections.reverseOrder()); // 2

        StringBuilder sb = new StringBuilder(); // 3
        for (String s : arr) {
            sb.append(s);
        }

        return Long.parseLong(sb.toString()); // 
    }
}
반응형