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

MineeHyun·2024년 7월 4일

문제 풀이

목록 보기
11/25

문제 설명

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

제한 조건

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

입출력 예

코드

import java.util.Arrays;

class Solution {
    public long solution(long n) {
        int len = 0;
        long temp = n;
        
        while (n != 0){
            n /= 10;
            len++;
        }
        
        long[] arr = new long[len];
        long answer = 0;

        for (int i = 0; i<len; i++){
            arr[i] = temp / (long)Math.pow(10, len-i-1);
            temp = temp % (long) Math.pow(10, len-i-1);
        }
        Arrays.sort(arr);
        
        for (int i=0; i<len; i++){
            answer += arr[i] * (long)Math.pow(10,i);
        }
        
        return answer;
    }
}

풀이

  • (while) 정수의 자릿수를 구한다.
  • array를 만들어서 한 자리씩 넣는다.
  • 정렬한다.
  • 적절한 자리에 넣는다.

다른 사람들의 멋진 풀이

  • 문자열로 만드는 것... String.valueOf(n)처럼 할 수 있군
  • toString()과 String.valueOf()는 무엇이 다른가?: 파라미터가 NULL일 때: toString은 nullPointerException (NPE)가 발생하고 String.valuOf()는 그냥 null을 return한다.

알게 된 것

  1. 자바는 Math.pow(밑, 지수) 라는 멋진 내장함수를 가지고 있다. 이 함수의 return은 double 형이다.
  • double과 long은 묵시적 형변환으로 같이 연산할 수 없다... 한 쪽을 명시적 형변환해서 맞춰줘야 한다.

더 공부할 것

  • toString(), String.valueOf() 파라미터로 null 줬을 때 결과 좀 더 확인해 보기...
  • StringBuilder 알아보기

0개의 댓글