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/
'Programing > Algorithm' 카테고리의 다른 글
Java, Javascript 프로그래머스 Level1 수박수박수박수박수박수? (0) | 2018.05.16 |
---|---|
Java, Javascript 프로그래머스 Level1 짝수와 홀수 (0) | 2018.05.16 |
Java 프로그래머스 Level1 나누어 떨어지는 숫자 배열 (0) | 2018.05.15 |
Java, Javascript 프로그래머스 Level1 행렬의 덧셈 (0) | 2018.05.14 |
Java, Javascript 프로그래머스 Level1 서울에서 김서방 찾기 (0) | 2018.05.14 |
댓글