Programing/Algorithm

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

리커니 2018. 5. 14.

목차

반응형

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

 

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() 에 대해선 알고 넘어갑시당!

 

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

 

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

 

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

 

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

반응형

댓글