문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
n | return |
118372 | 873211 |
나의 풀이
class Solution {
public long solution(long n) {
long answer = 0;
// 각 자릿수를 비교하려면 String으로 변경해야함
// long -> String : String.valueOf();
String str = String.valueOf(n); // "118372"
int[] arr = new int[str.length()];
for(int i = 0; i < str.length(); i++){
arr[i] = str.charAt(i) - 48; // 아스키코드
}
// {1, 1, 8, 3, 7, 2}
/* 아래로 돌리면 실패
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr.length; j++){
if(arr[i] < arr[j]){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
*/
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] < arr[j]) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
// {8, 7, 3, 2, 1, 1}
// 다시 String으로 바꿔주고 long타입으로 형변환해줘야함.
String str2 = "";
for(int k = 0; k < arr.length; k++){
str2 += arr[k];
}
// "873211"
// String을 long타입으로
answer = Long.valueOf(str2);
return answer;
}
}
다른 풀이
import java.util.Arrays;
class Solution {
public long solution(long n) {
// long -> String -> char[]
char[] chars = String.valueOf(n).toCharArray();
// 정렬 (오름차순)
Arrays.sort(chars);
// 뒤집기 (내림차순)
StringBuilder sb = new StringBuilder(new String(chars)).reverse();
// 문자열 -> long
return Long.parseLong(sb.toString());
}
}
'👨💻 Coding Test > Programers' 카테고리의 다른 글
[Programmers/Java/Lv.1/구현] 23.두 개 뽑아서 더하기 (1) | 2025.04.25 |
---|---|
Programmers/Java/Lv.2/수학 유형] 1.행렬의 곱셈 (0) | 2025.04.25 |
[Programmers/Java/Lv.1/문자열 유형] 21.자연수 뒤집어 배열로 만들기 (0) | 2025.04.13 |
[Programmers/Java/Lv.1/수학 유형] 20.자릿수 더하기 (0) | 2025.04.10 |
[Programmers/Java/Lv.1/문자열 유형] 19.이상한 문자 만들기 (0) | 2025.04.10 |