✏️오늘의 문제
public long solution(long n) {
long answer = 0;
String check = Long.toString(n);
char[] charArray = check.toCharArray();
Arrays.sort(charArray);
StringBuilder sortedString = new StringBuilder(new String(charArray)).reverse();
answer = Long.parseLong(sortedString.toString());
return answer;
}
아래는 자릿수를 내림차순으로 정렬하는 Java 메서드의 장점과 단점을 포함한 블로그 포스트 내용입니다.
이번 포스트에서는 주어진 숫자의 자릿수를 내림차순으로 정렬하는 Java 메서드를 소개하고, 이 메서드의 장점과 단점에 대해 논의하겠습니다.
public long solution(long n) {
// 입력 숫자를 문자열로 변환
String check = Long.toString(n);
// 문자열을 문자 배열로 변환
char[] charArray = check.toCharArray();
// 문자 배열을 오름차순으로 정렬
Arrays.sort(charArray);
// 정렬된 배열을 문자열로 변환 후 내림차순으로 뒤집기
StringBuilder sortedString = new StringBuilder(new String(charArray)).reverse();
// 문자열을 long 타입으로 변환하여 반환
return Long.parseLong(sortedString.toString());
}
n
을 문자열로 변환합니다.long
타입으로 변환하여 반환합니다.long
타입이기 때문에, 다양한 범위의 숫자를 처리할 수 있습니다. public long solution(long n) {
// 입력 숫자를 문자열로 변환한 후 문자 배열로 변환
char[] charArray = Long.toString(n).toCharArray();
// 문자 배열을 내림차순으로 정렬
Arrays.sort(charArray);
// 정렬된 배열을 StringBuilder로 내림차순으로 뒤집기
StringBuilder sortedString = new StringBuilder(new String(charArray)).reverse();
// 문자열을 long 타입으로 변환하여 반환
return Long.parseLong(sortedString.toString());
}
Long.toString(n).toCharArray()
를 사용하여 입력된 숫자를 문자 배열로 변환합니다.Arrays.sort(charArray)
로 문자 배열을 오름차순으로 정렬합니다.StringBuilder
를 사용하여 정렬된 배열을 내림차순으로 변환합니다.Long.parseLong()
을 사용하여 long
타입으로 변환하여 반환합니다.String res = ""; // 전역 변수로 문자열 res를 초기화
public int reverseInt(int n) {
res = ""; // 메서드 시작 시 res를 초기화
Integer.toString(n) // 정수 n을 문자열로 변환
.chars() // 문자열을 문자 스트림으로 변환
.sorted() // 문자 스트림을 오름차순으로 정렬
.forEach(c -> res = Character.valueOf((char)c) + res); // 정렬된 문자들을 res 앞에 추가
return Integer.parseInt(res); // 최종 문자열을 정수로 변환하여 반환
}
전역 변수:
String res = "";
는 클래스의 전역 변수로, 결과 문자열을 저장하는 데 사용됩니다. 하지만 전역 변수를 사용하는 것은 일반적으로 좋지 않은 습관입니다. 멀티스레드 환경에서 안전하지 않으며, 상태를 유지하게 되어 버그를 유발할 수 있습니다.메서드 시작:
res = "";
는 메서드가 호출될 때마다 결과 문자열을 초기화합니다. 이전 호출의 결과가 남지 않도록 합니다.정수 변환:
Integer.toString(n)
은 정수 n
을 문자열로 변환합니다. 예를 들어, n
이 118372
라면 "118372"
라는 문자열로 변환됩니다.문자 스트림 생성:
.chars()
는 문자열의 각 문자를 IntStream
형태로 변환합니다. 각 문자는 ASCII 값으로 표현됩니다.정렬:
.sorted()
는 문자 스트림을 오름차순으로 정렬합니다. 예를 들어, "118372"
는 정렬 후 ["1", "1", "2", "3", "7", "8"]
이 됩니다.문자 추가:
.forEach(c -> res = Character.valueOf((char)c) + res);
는 정렬된 각 문자에 대해 반복하며, res
문자열의 앞에 추가합니다. 즉, 가장 큰 숫자부터 차례로 res
에 추가됩니다. 이로 인해 res
는 내림차순으로 정렬된 문자열이 됩니다.정수 변환 및 반환:
return Integer.parseInt(res);
는 최종 문자열을 정수로 변환하여 반환합니다. 만약 res
가 "873211"
이라면, 이 메서드는 873211
을 반환합니다.이 메서드는 주어진 정수의 각 자릿수를 내림차순으로 정렬하여 새로운 정수를 생성합니다. 그러나 전역 변수를 사용하고, 메모리와 성능 측면에서 비효율적인 부분이 있어, 개선이 필요합니다. 또한, int
타입으로 제한되어 있어 큰 숫자를 처리할 수 없다는 점도 유의해야 합니다.