🍪 Ect/#Study

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

개발한 너굴씨 2024. 8. 1. 21:44
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