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

Marin·2024년 8월 1일
0

TIL

목록 보기
10/17
post-thumbnail

1 | 10일차 문제: 최소 힙

10일차 문제인 Kth Largest Number 보충 공부 및 추가 정리를 진행했다.

얻은 것
1. 우선순위 큐(Priority Queue)의 기본, 선언, 메서드
2. 힙(Heap) 구조
3. Stream에 대한 아주 아주 간략한 이해 -> 추가 공부 필요

2 | 오늘의 문제

1. 문제

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

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

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

2. 사고 및 알고리즘

  1. n의 자릿수를 구해야 한다.
    • long -> String으로 변환해 자릿수 구하기
  2. 정렬 필요
    • 오름차순 비교
      Arrays.sort(array1)로 가능
    • 내림차순 비교
      -> 이를 위해서는 복잡한 방식으로 돌아가던가(기억도 못해서 생략한다)
      -> Arrays.sort(array1, Collections.reverseOrder())를 사용하기 위해서는 array1Wrapper Class여야 한다.
  3. long 형태로 반환

3. 풀이

public long solution(long n) {
        //1. n의 길이 구하기
        String str = String.valueOf(n);
        int length = str.length();
        int[] result = new int[length];
        
        //2. n의 자릿수 int 배열로 분할
        for (int i = 0; i < length; i++) {
            result[i] = str.charAt(i) - '0';
        }
        
        //3. 오름차순 정렬
        Arrays.sort(result);
        
        //4. long 만들기, 거꾸로 대입
        long answer = 0;
        for (int i = length - 1; i >= 0; i--) {
            answer  = answer * 10 + result[i];
        }
        
        return answer;
        
    }
}

4. 보완

  1. 바로 내림차순으로 정렬해 쓸 수 있는 방향으로 다시 해보자.
  2. StringBuilder 사용하는 분이 계셨는데 지금 다시 복습하는 중...

키워드

  • 내림차순 정렬: Wrapper Class
  • StringBuilder 활용하기
  • Arrays.sort() 활용하기
profile
대학생 | BE | 취준 | Fight or Flight

0개의 댓글