본문 바로가기
🍪 Ect/#Study

[99클럽 코테 스터디] 11일차 TIL 정렬

by 개발한 너굴씨 2024. 8. 1.
728x90

 

 

오늘의 문제는 프로그래머스

 

 

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

 

 

문제

 

 

 

문제 설명 

 

주어진 long형 정수 n을 내림차순으로 정렬하여 반환하는 문제입니다. 

예를 들어 n이 118372라면, 내림차순으로 정렬된 873211이 리턴되도록 하면 됩니다. 

 

 

 

문제 접근 및 풀이 과정

권장 풀이 시간은 30분이었고, 저는 19분이 걸렸습니다.

오늘의 키워드는 정렬이었습니다. 그래서 미리 정렬 알고리즘에 대한 공부를 간단하게 하고 문제 풀이를 진행했습니다. 덕분에 문제를 어떻게 풀면 좋을지 손쉽게 떠올릴 수 있었습니다. 

 

 

 

문제 접근 방식

자바에서 배열을 정렬할 때 사용하는 메서드인 Arrays.sort()를 사용한 풀이를 생각했습니다. 먼저 주어진 n은 long 타입의 정수입니다. 하지만 long 타입의 숫자를 배열로 바로 변환할 수 없기 때문에 이를 문자열로 변환한 다음 변환된 문자열을 배열로 변환했습니다.  이후 내림차순으로 정렬한 배열을 다시 long형으로 변환하여 반환하면 됩니다. 

 

 

 

문제 풀이

import java.util.Arrays;
import java.util.Collections;

class Solution {
    public long solution(long n) {
        
        String str = Long.toString(n);
         
        String[] arr = str.split("");
        
        Arrays.sort(arr, Collections.reverseOrder());
        
        //String s = Arrays.toString(arr);
        String s = String.join("", arr);
        
        long answer = Long.parseLong(s);  
    
        
        return answer;
    }
}

 

 

메서드를 활용한 배열 내림차순 정렬하기 

 

Arrays.sort() 메서드를 사용하여 배열의 정렬하는 방법 입니다. 해당 메서드는 오름차순을 기본값으로 하고 있어 내림 차순을 하기 위해선 추가적인 조건을 주어야 합니다.  바로 sort의 두 번째 인자로 Comparator의 구현체를 주는 것입니다. 

여기서 Comparator란 객체 간의 비교를 위해서 필요한 메서드를 정리해 놓은 인터페이스입니다.

따라서 이를 사용해 아래와 같이 코드를 작성하면 배열을 내림차순 정렬할 수 있습니다. 

Arrays.sort(arr, Collections.reverseOrder());

 

 

 

문자열 배열을 문자열로 변환하기

문자열 배열을 합쳐 문자열로 변환하는 과정에서 Arrays.toString(arr); 메서드를 사용할 때 컴파일 오류가 발생했습니다. 이유는 해당 메서드가 배열을 [a, b, c, ....] 형태의 문자열로 변환하기 때문입니다. 따라서 문자열을 다시 숫자 형태로 변환하려고 할 때 오류가 발생한 것입니다. 

따라서 String.join("", arr); 메서드를 사용하여 배열의 요소를 하나의 문자열로 결합한 다음 숫자로 변환하는 방식으로 수정하였습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이렇게 오늘 11일차 TIL을 작성해 보았습니다.

728x90

댓글