오늘의 문제는 프로그래머스
정수 내림차순으로 배치하기
문제
문제 설명
주어진 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을 작성해 보았습니다.
'🍪 Ect > #Study' 카테고리의 다른 글
[99클럽 코테 스터디] 13일차 TIL 이분탐색 (0) | 2024.08.03 |
---|---|
[99클럽 코테 스터디] 12일차 TIL 정렬 (0) | 2024.08.02 |
[99클럽 코테 스터디] 10일차 TIL 힙 (0) | 2024.07.31 |
[99클럽 코테 스터디] 9일차 TIL 힙 (0) | 2024.07.30 |
[99클럽 코테 스터디] 8일차 TIL 스택/큐 (0) | 2024.07.29 |
댓글