Programing/Algorithm

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

리커니 2018. 5. 14.
반응형

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

 

 

 

문자열을 입력받아 내림차순으로 정렬해 리턴하는 문제 입니다.

그럼 제가 푼 코드를 보도록 하죠.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.*;
public class ReverseStr {
    public String reverseStr(String str){
        String[] charArray = str.split("");        
        Arrays.sort(charArray);
        StringBuffer sb = new StringBuffer();
        for(int i=0; i<charArray.length; i++){
            sb.append(charArray[i]);
        }
        return sb.reverse().toString();
    }
 
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        ReverseStr rs = new ReverseStr();
        System.out.println( rs.reverseStr("Zbcdefg") );
    }
}
cs

 

우선 받은 문자열을 한글자씩 잘라 배열에 넣고

그 배열을 오름차순으로 정렬한 후 (Arrays.sort()는 오름차순 정렬)

다시 스트링버퍼로 만든 후 그 것을 뒤집었습니다.

 

다른분들의 코드를 보면서 알고리즘의 재미를 느낄 수 있었습니다.

비슷한 방식으로 푸신 분도 계시고, 완전히 다른 방식으로 푸신 분도 계셨습니다.

 

스트링버퍼가 아닌 콜렉션(List)에서 reverse 메소드를 쓰신분도 계시고, 정렬알고리즘을 사용하신분,

아스키 코드를 사용하신 분 등...

 

 

 

일단 다른 분들의 코드를 참고하여

제가 작성한 코드를 리펙토링 해보아야겠습니다.

 

String[] charArray = str.split("");

한 자씩 자르는데 불필요하게 String 배열을 사용했네요..

char[] charArray = str.toCharArray(); 

==> toCharArray() 메소드를 사용해서 메모리를 아낄 수 있죠.

 

그리고 멀티쓰레드에서 사용하는 코드가 아니므로 StringBuffer보다는 StringBuilder를 사용하는 것이 맞다고 판단됩니다.

 

가독성은 좀 떨어지지만 코드를 좀 줄여보면 아래와 같은 간결한 코드가 되겠네요.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;
public class ReverseStr {
    public String reverseStr(String str){
        char[] charArray = str.toCharArray();
        Arrays.sort(charArray);
        return new StringBuilder(new String(charArray)).reverse().toString();
        //return new StringBuffer(String.valueOf(charArray)).reverse().toString();
    }
 
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        ReverseStr rs = new ReverseStr();
        System.out.println( rs.reverseStr("Zbcdefg") );
    }
}
cs

 

 

StringBuilder와 StringBuffer의 차이와 메소드의 사용법, String의 toCharArray() 에 대해선 알고 넘어갑시당!

 

 

StringBuilder와 StringBuffer의 차이는 아래의 Link를 참고하세요.

 

Link : Java List<VO> to JsonArray, String, StringBuilder, StringBuffer

 

문제출처 : https://programmers.co.kr/

반응형

댓글

💲 추천 글