728x90
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건- n은 1이상 8000000000 이하인 자연수입니다.
나의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
class Solution {
public long solution(long n) {
String answer = "";
String str = Long.toString(n);
int[] arr = new int[str.length()];
//long타입의 숫자를 Int배열로 올긴다.
for(int i = 0; i < str.length(); i++) {
String s = str.substring(i, i+1);
arr[i] = Integer.parseInt(s);
}
//내림차순 정렬
for(int j = 0; j < str.length()-1; j++){
for(int i = 0; i < str.length()-1; i++) {
if (arr[i] < arr[i+1]) {
int tmp = arr[i+1];
arr[i+1] = arr[i];
arr[i] = tmp;
}
}
}
for(int i = 0; i < str.length(); i++){
answer += arr[i];
}
return Long.parseLong(answer);
}
}
|
cs |
숫자를 배열에 담고, 배열 내에서 각 숫자별로 크기를 비교한 뒤 내림차순으로 정렬시켰다.
정렬시킨 배열을 다시 문자열에 담아 형변환하여 반환시켜주었다.
api, 메소드를 최대한 사용하지 않고 풀려하다보니 다소 복잡한 풀이가 되었다.
다른 사람의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.util.*;
class Solution {
public long solution(long n) {
String[] list = String.valueOf(n).split("");
Arrays.sort(list);
StringBuilder sb = new StringBuilder();
for (String aList : list) sb.append(aList);
return Long.parseLong(sb.reverse().toString());
}
}
|
cs |
sort 메소드와 StringBuilder를 사용한 풀이이다.
sort로 배열을 오름차순으로 정렬한 뒤, 반복문과 StringBulder를 이용하여 정렬된 값을 문자열에 담았다.
마지막으로 reverse메소드를 통해 내림차순으로 정렬해주었다.
'잡화 > 코딩테스트' 카테고리의 다른 글
[프로그래머스]제일 작은 수 제거하기(JAVA) (0) | 2022.06.10 |
---|---|
[프로그래머스] 자릿수 더하기(JAVA) (0) | 2022.06.09 |
[프로그래머스] K번째 수(JAVA) (0) | 2022.05.31 |
코딩 테스트 함수 정리[JAVA] (0) | 2022.05.31 |
댓글