알고리즘/프로그래머스

코딩테스트 연습 / 연습문제 / 정수 내림차순으로 배치하기

외계공룡 2020. 4. 14. 17:26

문제 설명

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

 

제한 조건

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

 

입출력 예

n return
118372 873211

 


나의 풀이

import java.util.Arrays;
import java.util.Collections;

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

	Integer[] arr = new Integer[(int) Math.ceil(Math.log10(n))];
		
	for(int i=0; i<arr.length; i++) {
		arr[i] = (int)(n % 10);
		n/=10;
	}
		
	Arrays.sort(arr, Collections.reverseOrder());
		
	StringBuilder sb = new StringBuilder();
	for(int i=0; i<arr.length; i++) {
		sb.append(arr[i]);
	}
		
	answer = Long.parseLong(new String(sb));
	return answer;
  }
}

 

 


풀이 설명

문제보자마자 long타입의 숫자를 10자리 이하로 다 뜯어내서 배열에 집어넣고 역순 정렬한뒤 다시 붙여야겠다는 생각을 했다.

 

다른 사람의 풀이

public class ReverseInt {
    String res = "";
    public int reverseInt(int n){
        res = "";
        Long.toString(n).chars().sorted().forEach(c -> res = Character.valueOf((char)c) + res);
        return Integer.parseInt(res);
    }

    public static void  main(String[] args){
        ReverseInt ri = new ReverseInt();
        System.out.println(ri.reverseInt(118372));
    }
}

 

자바 8의 특성인 stream을 이용한 것으로 보이는데 공부를 좀 더 해봐야 할것 같다.