본문 바로가기
알고리즘

문자열 내림차순으로 배치하기

by 완기 2020. 11. 1.
728x90
반응형

문제 설명

 

문자열 s에 나타나는 문자를 큰 것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

 

제한 사항

str은 길이 1 이상인 문자열입니다.

 

ex:)

 

 

 

 

 

 

 

 

 

 


1.문자열 s의 각 원소마다 비교해야 하니까 charAt()랑 아스키코드가 떠올랐다.

 

아스키코드

2. 아스키코드가 떠오르다 보니 값으로 비교하려고 했는데, 그냥 Arrays클래스의 sort 메서드를 사용하기로 했다.

 


나의 풀이

class Solution {
    public String solution(String s) {
        String answer = "";
        char[] split =s.toCharArray();
        Arrays.sort(split);
        StringBuilder sb=new StringBuilder(answer);
        for(int i=0;i<split.length;i++){
            sb.append(split[i]);
        }
        answer=sb.reverse().toString();
        return answer;
    }
}

1.String 클래스의 toCharArray() 메서드를 이용해서 문자열의 각 원소를 char배열에 넣어줬다.

 

2. 그다음 Arrays클래스의 sort기능을 이용하면, 아스키코드값을 기준으로 오름차순으로 정렬이 되는데, 그걸 StringBuilder클래스의 reverse() 메서드를 이용해서 뒤집었다.

 

3. 정렬을 뒤집으니 역 정렬인셈이다.

 

 

 

바로 역 정렬을 생각하기도 했는데, 메서드를 찾다가 StackOverflow에서는 프리미티브 타입엔 사용이 불가능하기 때문에 새로운 배열을 만들면서 반복문을 돌리는 것보다 나을 거란 생각에 포기했다.

 

 

 

 

다른 사람의 풀이

 

문제 해결을 위한 메서드나 오브젝트 사용은 동일했으나 코드가 훨씬 깔끔하다...

더 공부해야겠다.

 

 

참고 : stackoverflow.com/questions/5584579/how-to-sort-an-array-in-reverse-order-using-java/5584783

728x90
728x90

댓글