[프로그래머스] Level1. 문자열 내림차순으로 배치하기

Benjamin·2023년 3월 15일

프로그래머스

목록 보기
43/67

내 풀이

import java.util.Arrays;
import java.util.Collections;

class Solution {
    public String solution(String s) {
        String answer = "";
        Integer[] ascii = new Integer[s.length()];
        for(int i=0; i<s.length(); i++) {
            ascii[i] = (int)s.charAt(i);
        }
        Arrays.sort(ascii, Collections.reverseOrder());
        for(int i=0; i<ascii.length; i++) {
            answer += (char)(int)ascii[i];
        }
        
        return answer;
    }
}

배열을 내림차순으로 정렬하려면 인자로 Collections.reverseOrder()을 넣어야하는데 이를 위해서는 배열 타입이 int가 아닌 Integer이어야 한다.

그런데 Integer타입은 (char)을 이용해서 문자타입으로 캐스팅하지 못한다.
그래서 (char)(int)이렇게 두번 연결해서 사용했다.

그런데 나는 이 사항이 지저분하게 느껴졌다.

다른 풀이

import java.util.Arrays;

class Solution {
    public String solution(String s) {
        char[] sol = s.toCharArray();
        Arrays.sort(sol);
        return new StringBuilder(new String(sol)).reverse().toString();
    }
}

우선 toCharArray()를 사용해서 하나씩 문자 배열에 넣어줬다.
이후 이 배열을 정렬한다.

여기서 달랐던 부분!
나는 정렬을 위해 문자타입을 정수타입으로 변환해야한다고 생각했다.
그건 필요없다! 생각해보면 char도 정수타입이기때문에 정렬이 가능하다..

하지만 내림차순 정렬은 되지않기때문에 StringBuilder를 이용해서 이부분은 해결한다.
우선 new String()을 사용해 배열을 문자열로 바꾸고, reverse()를 이용해 뒤집는다.
이후 .toString()을 사용해 문자열로 변환한다.

공부한 사항

배열을 내림차순으로 정렬하려면 인자로 Collections.reverseOrder()을 넣어야하는데 이를 위해서는 배열 타입이 int가 아닌 Integer이어야 한다.

그런데 Integer타입은 (char)을 이용해서 문자타입으로 캐스팅하지 못한다.
그래서 (char)(int)이렇게 두번 연결해서 사용했다.

0개의 댓글