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

김동현·2022년 5월 23일

정수 내림차순으로 배치하기 문제
https://programmers.co.kr/learn/courses/30/lessons/12933

문제설명

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

제한조건

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

입출력 예시

nreturn
118372873211


내 코드

import java.util.*;
class Solution {
    public long solution(long n) {
        long answer = 0;
        String[] arr = String.valueOf(n).split("");
        Arrays.sort(arr);
        StringBuilder sb = new StringBuilder();
        for(int i = arr.length-1; i >= 0; i--){
            sb.append(arr[i]);
        }
        answer = Long.parseLong(sb.toString());
        return answer;
    }
}

알게된 점

  • StringBuilder
    일반적으로 문자열을 추가할 때 str += "문자열";과 같이 하곤했다.
    편한 방법이지만 String은 불변(immutable)객체이기 때문에 새로운 String을 생성하여 성능적으로 좋지 않다.
    하지만 StringBuilder.append() 메서드를 사용하여 문자열을 추가한다면 아래 테스트 결과와 같이 수행시간과 메모리 모두 전보다 효율이 좋아졌음을 확인할 수 있다.

String에 + 연산자 사용 시

테스트 1 〉 통과 (1.51ms, 86.1MB)
테스트 2 〉 통과 (1.38ms, 76.1MB)
테스트 3 〉 통과 (1.36ms, 77.4MB)
테스트 4 〉 통과 (1.32ms, 78.3MB)
테스트 5 〉 통과 (1.37ms, 74MB)

StringBuilder 사용 시

테스트 1 〉 통과 (0.52ms, 79.1MB)
테스트 2 〉 통과 (0.29ms, 75.5MB)
테스트 3 〉 통과 (0.33ms, 77.3MB)
테스트 4 〉 통과 (0.35ms, 77.9MB)
테스트 5 〉 통과 (0.40ms, 76.4MB)

profile
오늘은 오늘

0개의 댓글