lv1 짜리 문제라 쉽게 다가갔는데 이게 웬걸? 생각보단 어려웠다.
내 풀이를 보자.
import java.util.*;
class Solution {
public long solution(long n) {
//주어진n을 String으로 바꾸고
String longToString = Long.toString(n);
//String 배열 nums에 하나씩 넣기
String [] nums = longToString.split("");
//nums 를 long형으로 바꿔서 넣을 longNums 초기화
long[] longNums = new long[nums.length];
//long배열 longNums에 하나씩 넣기
for(int i = 0; i < nums.length; i++){
longNums[i] = Long.parseLong(nums[i]);
}
//longNums를 오름차순으로 정렬
Arrays.sort(longNums);
//longNums를 내림차순으로 정렬
for (int i = 0; i < longNums.length / 2; i++) {
long temp = longNums[i];
longNums[i] = longNums[longNums.length - 1 - i];
longNums[longNums.length - 1 - i] = temp;
}
//배열에있는 수들을 하나로 합치기 3, 2, 1 -> 321
StringBuilder combinedString = new StringBuilder();
for (long number : longNums) {
combinedString.append(number);
}
//합친 combinedString을 long형으로 바꾼다.
long combinedValue = Long.parseLong(combinedString.toString());
1. split을 사용하기 위해 String으로 변환하고
2. String 배열에 split으로 하나하나 집어넣고
3. long 배열을 만들고 String 배열에 하나씩 빼서 집어넣기
4. 오름차순 정렬
5. 다시 내림차순 정렬
6. 정렬된 수를 합치기
7. 합친걸 리턴
이런 순서로 풀었는데 너무 비효율적으로 형변환을 했다. 형변환을 최소화하는방법은 없을까?
public static long solution(long n){
String numberStr = Long.toString(n);
String[] digits = numberStr.split("");
// 문자 배열을 내림차순으로 정렬
Arrays.sort(digits, Collections.reverseOrder());
// 정렬된 문자 배열을 다시 문자열로 합치고 long으로 변환하여 리턴
String sortedNumberStr = String.join("", digits);
return Long.parseLong(sortedNumberStr);
}
지피티는 컬렉션을 사용해서 쉽게 내림차순으로 정렬을 해버린다. 컬렉션에대해서도 한번 공부해봐야겠다.
'Java > 알고리즘' 카테고리의 다른 글
두 정수 사이의 합 (1) | 2024.01.08 |
---|---|
하샤드 수 (1) | 2024.01.05 |
뒤에 있는 큰 수 찾기 (0) | 2023.11.22 |
주식 가격 (1) | 2023.11.21 |
주차 요금 계산 (0) | 2023.11.08 |