오늘의 코딩 테스트

오늘의 코딩 테스트(문자열 내림차순으로 배치하기)

oceanflow 2025. 2. 25. 10:56

문자열 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가 더 좋다.