문제
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
- 출력 예시 -
정답 코드
< 내 정답 코드 >
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public long solution(long n) {
String result = "";
String num = n + "";
ArrayList<Long> list = new ArrayList<>();
for (int i = 0; i < num.length(); i++) {
char ch = num.charAt(i);
long nn = ch - '0';
list.add(nn);
}
Collections.sort(list, Collections.reverseOrder());
for (long i : list) {
result += i;
}
return Long.parseLong(result);
}
}
< 타인 답변 코드 >
import java.util.*;
class Solution {
public long solution(long n) {
String[] strArr = (n + "").split("");
Arrays.sort(strArr, Collections.reverseOrder());
StringBuilder sb = new StringBuilder();
for (String s : strArr) {
sb.append(s);
}
return Long.parseLong(new String(sb));
}
}
이것을 주의하자!
- 일단 long 형 매개변수를 String 객체로 변환한다. 그리고 charAt() 메서드를 이용해서 숫자 하나씩 뺀 다음 ArrayList< Long > 에 저장한다. Collections 의 sort() 메서드를 통해 정렬을 한 뒤, 다시 String 객체로 만들고 마지막에 long 형으로 변환하는 방법을 사용했다.
long ☞ [ String ☞ char ☞ Long ☞ ArrayList 에 저장 ] ☞ 컬렉션 정렬
- 타인 답변 코드를 봐도 비슷한 알고리즘이다. 물론 더 깔끔하다. 정렬까지 가는 과정이 매우 간단하다. 그리고 정렬된 리스트를 long 형으로 변환하는 과정도 StringBuilder 을 사용했다.
long ☞ [ String ☞ String [] ] ☞ 배열 정렬
- 정렬하는 방법에는 기존의 메서드를 사용하면 된다. 컬렉션 프레임워크의 경우 'Collections.sort()' 와 'list.sort()' 메서드가 있다. 기본적으로 오름차순 정렬이다. 배열도 'Arrays.sort()' 메서드를 사용할 수 있다. 만약 내림차순으로 바꾸고 싶다면 'Collections.reverseOrder()'을 매개변수로 넣으면 된다.
'코딩 테스트' 카테고리의 다른 글
[프로그래머스] (Lv.1) 자릿수 더하기 (0) | 2022.08.31 |
---|---|
[프로그래머스] (Lv.1) 자연수 뒤집어 배열로 만들기 (0) | 2022.08.31 |
[프로그래머스] (Lv.1) 정수 제곱근 판별 (0) | 2022.08.31 |
[프로그래머스] (Lv.1) 제일 작은 수 제거하기 * (0) | 2022.08.30 |
[프로그래머스] (Lv.1) 짝수와 홀수 (0) | 2022.08.30 |