[프로그래머스] Java 코딩테스트 - 정수 내림차순으로 배치하기 (Lv.1)

yihyun·2025년 7월 8일

코딩테스트

목록 보기
95/105
post-thumbnail

정수 내림차순으로 배치하기 (Lv.1)

✅ 문제설명

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

✅ 제한사항

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


📌 내림 차순 방법

배열을 오름차순으로 정렬할 때는 sort()를 사용해 간단히 사용 가능하지만,
내림차순은 조금 더 많은 과정이 필요로 합니다.

내림차순으로 정렬하는 방법에는 여러가지가 있습니다.
1) 반복문 사용
2) Collections.reversOrder() 사용
3) reverse() 사용

이번 문제는 2번과 3번을 사용해 풀이를 진행하였습니다.

먼저 Collections.reversOrder() 을 사용하기 위해선 int, long 가 아닌 Integer, Long 와 같이 class 타입으로 배열을 선언해주어야 합니다.

이후 배열을 정렬해주며 내림차순을 위한 함수를 선언해줍니다.
Arrays.sort(arr, Collections.reverseOrder());


3번 방법의 경우 문자열을 다룰 때 자주 사용되는 방식입니다.
먼저 오름차순으로 정렬을 진행한 후 StringBuilder 를 선언해 reverse() 함수를 사용해줍니다.

정렬 자체를 바꾸는 것이 아닌 정렬된 결과를 뒤집는 방식으로 내림차순을 구현하는 방법입니다.


🔽 소스코드 1 (Collections.reversOrder() 사용)

  1. 먼저 long을 하나씩 담아주기 위한 배열을 선언해줍니다.
    List<Integer> 로도 선언 가능합니다.

  2. 이후 하나씩 구분하기 위해 반복문을 사용해 줍니다.
    n % 10 으로 한 자리씩 배열에 담아주고,
    n /= 10 으로 배열에 담은 수를 제거합니다.

  3. 이후 sort()Collections.reverseOrder() 를 사용해 내림차순으로 정렬합니다.

  4. 정렬이 완료 되었다면 long 타입으로 return 하기 위해 StringBuilder 으로 배열을 하나의 문자열로 만들어 주고,

  5. 다시 long로 변환하여 return 해줍니다.

시간 0.30ms ~ 1.00ms

	public long solution(long n) {
		
		Long[] arr = new Long[String.valueOf(n).length()];
		
		for(int i = 0; i < arr.length; i++) {
			arr[i] =  n % 10;
			n /= 10;
		}
		
		Arrays.sort(arr, Collections.reverseOrder());
		
		StringBuilder sb = new StringBuilder();
		
		for(long l : arr) {
			sb.append(l);
		}
		
	
		return Long.parseLong(sb.toString());
	}

🔽 소스코드 2 (reverse() 사용)

  1. 먼저 long을 하나씩 담아주기 위한 String 배열을 선언한 후 split("") 를 이용해 하나씩 배열에 담아줍니다.

  2. 이후 sort() 를 사용해 오름차순으로 1차 정렬을 진행합니다.

  3. 오름차순 정렬 후 StringBuilder 를 이용해 배열의 값들을 하나로 합쳐준 뒤

  4. reverse() 를 이용해 내림차순으로 정렬하며 long 타입으로 변환해 최종 return 합니다.

시간 0.16ms ~ 0.20ms

	public long solution1(long n) {
		
		String[] arr = String.valueOf(n).split("");
		
		Arrays.sort(arr);
		
		StringBuilder sb = new StringBuilder();
		
		for(String str : arr) {
			sb.append(str);
		}
		
		return Long.parseLong(sb.reverse().toString());
	}
profile
개발자가 되어보자

0개의 댓글