문제: https://school.programmers.co.kr/learn/courses/30/lessons/12933
처음에는 String.parseString(n) 메서드를 사용하려 했으나, Java에서 이런 메서드는 없었다.
필요할 경우 String.valueOf(n) 또는 Long.toString(n)을 사용하여 long 타입의 숫자를 문자열로 변환할 수 있었다.
내가 생각해낸 방법은 아래와 같다.
이 내용을 토대로 문제를 풀어봤다.
--
import java.util.Arrays;
class Solution {
public long solution(long n) {
String str1 = Long.toString(n);
char[] ch = str1.toCharArray();
StringBuilder sbuilder = new StringBuilder();
Arrays.sort(ch);
for(int i=ch.length-1; i>=0; i--) {
sbuilder.append(ch[i]);
}
String str2 = sbuilder.toString();
long answer = Long.parseLong(str2);
return answer;
}
}
👉 문자열을 배열로 변환하고, 배열을 정렬한 후 StringBuilder를 사용하여 문자열을 뒤집고, 다시 숫자로 변환했다.
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public long solution(long n) {
ArrayList<Integer> temp = new ArrayList<>();
while(n > 0){
temp.add((int)(n % 10));
n /= 10;
}
Collections.sort(temp, Collections.reverseOrder());
StringBuilder result = new StringBuilder();
for (int digit : temp) {
result.append(digit);
}
return Long.parseLong(result.toString());
}
}
👉 숫자를 분해하여 각 자릿수를 내림차순으로 정렬한 후, 다시 문자열로 합치는 과정을 거칩니다.
📚 배운 점: StringBuilder의 reverse() 메서드
StringBuilder 클래스에는 문자열을 뒤집는 reverse() 메서드가 구현되어 있었다. 반면, String 클래스는 불변(immutable)하기 때문에 reverse() 메서드를 직접 제공하지 않는다.
따라서 문자열을 뒤집기 위해서는 StringBuilder를 사용하는게 효율적이다