[Programmers] 코딩테스트 입문 12933. 정수 내림차순으로 배치하기

이지현·2023년 4월 12일
0

Algorithm

목록 보기
72/81
post-thumbnail

Programmers 코딩테스트 연습 Lv.1을 시작했다. 10분 이상 고민한 문제만 블로깅 할 예정이다. 이 단계부터는 리팩토링 하는 과정을 통해 실행시간과 메모리를 효율적으로 사용하는 방법을 터득할 것이다.

✔️ Problem URL

정수 내림차순으로 배치하기


✔️ Problem

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


✔️ Code

import java.util.Arrays;
import java.util.stream.*;
import java.util.Collections;

class Solution {
    public long solution(long n) {
        
        int[] digits = Stream.of(String.valueOf(n).split("")).mapToInt(Integer::parseInt).toArray();
        Integer[] digits2 = new Integer[digits.length];
        for(int i = 0; i < digits.length; i++) {
            digits2[i] = digits[i];
        }
        Arrays.sort(digits2,Collections.reverseOrder());
        
        String s = "";
        for(int i : digits2) s += i;
        
        return Long.parseLong(s);
    }
}

코드는 통과되었지만 실행시간이 비효율적이다.

✔️ Refactoring

💡 reverseOrder 대신 StringBuilder의 reverse()를 사용하였다.
💡 이로 인해 Integer타입 배열에 복사하여 역순 정렬을 하는 부분이 리팩토링 되었다.

import java.util.Arrays;

class Solution {
    public long solution(long n) {
        String[] strArr = String.valueOf(n).split("");
        Arrays.sort(strArr);
        
        StringBuilder sb = new StringBuilder();
        for(String s : strArr) sb.append(s);
        
        return Long.parseLong(sb.reverse().toString());
    }
}
profile
2023.09 ~ 티스토리 이전 / 2024.04 ~ 깃허브 블로그 이전

0개의 댓글