(Java/자바) 프로그래머스 Lv1 - 정수 내림차순으로 배치하기

문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다.

n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.

예를들어 n이 118372면 873211을 리턴하면 됩니다.

 

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

 

입출력 예
n return
118372 873211

 


Solution.java

import java.util.*;

class Solution {
	public long solution(long n) {
		String[] arr = String.valueOf(n).split("");
		Arrays.sort(arr); // 오름차순 정렬

		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < arr.length; i++) {
			sb.append(arr[i]); // 문자 하나씩 합치기
		}
        
		return Long.parseLong(sb.reverse().toString());

	}
}

이 문제를 풀기 위해서 문자열을 연결해주는 StringBuilder를 사용하였습니다.

자세한 내용은 코드를 한 줄 씩 분석하여 설명하겠습니다.

 

코드 해설

n이 118372 이라고 가정하고 설명하겠습니다.

 

  1. sort ( 정렬 )은 배열에서 사용가능하기에 새로운 문자열 배열 String arr를 생성합니다.
  2. String arr 배열에 n의 값을 하나씩 담기 위해 String.valueOf(n) 을 통해 정수를 문자열로 변환하고 split() 메서드로 "" 단위로 문자 하나씩 쪼갭니다.
    => arr : ["1", "1", "8", "3", "7", "2"] 
  3. Arrays.sort(arr) 를 통해 오름차순 정렬합니다. 
    => arr : ["1", "1", "2", "3", "7", "8"]
  4. 문자열을 더해주는 StringBuilder 사용하기 위해 StringBuilder sb = new StringBuilder() 로 객체를 선언합니다.
  5. arr 배열의 인덱스 0 번째 부터 마지막까지 sb.append 메서드를 통해 하나씩 합칩니다.
    => sb : 112378
  6. sb 변수를 reverse() 메서드로 내림차순 변경하고, toString 메서드로 문자열로 변환합니다.
    => sb : reverse() - 873211" => toString - "873211"
  7.  n이 long 형이기에 Long.parseLong로 문자열을 long형으로 변환하여 반환합니다.
    => 873211