문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성하세요.
s는 영문 대소문자로만 이루어져 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
제한 사항
s는 길이 1 이상인 문자열
import java.util.Arrays;
class Solution {
public String solution(String s) {
char[] arr = s.toCharArray();
Arrays.sort(arr);
StringBuilder answer = new StringBuilder();
for (int i = s.length() - 1; i >= 0; i--) {
answer.append(arr[i]);
}
return answer.toString();
}
}
처음에는
import java.util.Arrays;
class Solution {
public String solution(String s) {
char[] arr = s.toCharArray();
Arrays.sort(arr);
String answer = "";
for (int i = arr.length - 1; i >= 0; i--) {
answer += arr[i];
}
return answer;
}
}
이렇게 풀었었다.
answer += arr[i]; 이렇게 해도 작동은 하지만
자바에서 String 객체는 불변이기 때문에 계속 새로운 String 객체가 메모리에 생성되고
기존 문자열과 새 문자열의 내용이 복사가 된다.
따라서 메모리 낭비와 성능 저하, 가비지 컬렉션 부담이 증가한다.
StringBuilder는 이를 해결해준다. 객체 생성을 최소화해주고 메모리 효율성을 높여주며 성능을 향상시킬 수 있다.
StringBuilder는 가변 객체이기 때문이다. StringBuilder는 문자열 조작 시 새 객체를 생성하지 않고 기존 버퍼를 수정한다.
StringBuilder 대신 Stringbuffer를 사용할 수 있다.
StringBuilder가 Stringbuffer보다 더 빠르다 왜냐하면 동기화가 없기 때문이다.
하지만 멀티 스레드 환경에서는 Stringbuffer가 더 좋다.
'오늘의 코딩 테스트' 카테고리의 다른 글
오늘의 코딩 테스트( 문자열 다루기 기본) (0) | 2025.02.27 |
---|---|
오늘의 코딩 테스트(부족한 금액 계산하기) (0) | 2025.02.26 |
오늘의 코딩 테스트(약수의 개수) (0) | 2025.02.24 |
오늘의 코딩 테스트(내적) (1) | 2025.02.21 |
오늘의 코딩 테스트(수박수박수박수박수박수?) (0) | 2025.02.19 |