99클럽 코테 스터디 11일차 TIL | 정수 내림차순으로 배치하기

fever·2024년 8월 1일
0

99클럽 코테 스터디

목록 보기
11/42
post-thumbnail

🛠️ 문제

💻 풀이

문자열로 변환 후 풀어본 첫번째 풀이. 내림차순 정렬 말고는 크게 어려운 게 없었다. 다만 문제가 있다면, 굳이 문자열로 바꾸고, 문자열에서 다시 LONG으로 바꾸는 게 너무 비효율적이라 생각이 들었다. 그래서 해당 과정을 바꿔보기로 결정!

import java.util.*;

class Solution {
    public long solution(long n) {
        List<Integer> digits = new ArrayList<>();
        String ns = Long.toString(n);

        for (int i = 0; i < ns.length(); i++) {
            char c = ns.charAt(i);
            digits.add(Character.getNumericValue(c)); 
        }
        
        //내림차순 정렬
        Collections.sort(digits, Collections.reverseOrder());

        // 정렬된 리스트를 문자열로 변환
        StringBuilder sb = new StringBuilder();
        for (int digit : digits) {
            sb.append(digit);
        }

        // 문자열을 long으로 변환
        long sortedNumber = Long.parseLong(sb.toString());

        return sortedNumber;
    }
}

두번째 풀이는 자리수를 계산하고, 해당 자리수만큼 INT배열을 만들어서 풀었다. 변환이 한번이라 좋았지만, 이또한 자릿수 계산할 때 문자로 바꾸었기 때문에 조금 더 고민이 필요할 듯...

import java.util.*;

class Solution {
    public long solution(long n) {
        // 자릿수 계산
        String numberStr = Long.toString(n);
        int length = numberStr.length();
        Integer[] digits = new Integer[length];

        // 배열 저장
        for (int i = 0; i < length; i++) {
            digits[i] = numberStr.charAt(i) - '0';
        }

        // 내림차순 정렬
        Arrays.sort(digits, Collections.reverseOrder());

        // 반환값 설정
        long sortedNumber = 0;
        for (int digit : digits) {
            sortedNumber = sortedNumber * 10 + digit;
        }

        return sortedNumber;
    }
}

🤔 고찰

  1. 숫자와 문자는 자주 변환되는 문제들이 많아서 방식이 익숙해져야 하는데, 할 때마다 당황해서 메서드를 찾아본다. 이제 슬슬 암기가 필요할 타이밍...

  2. 회사에서 일할 때 종종 쓰지만 볼 때마다 낯선 Collections에 대해 조금 더 고찰이 필요하다.

profile
선명한 삶을 살기 위하여

0개의 댓글