import java.util.*;
import java.util.stream.Collectors;
class Solution {
public String solution(String s) {
return Arrays.stream(s.split("")).map(a->a.charAt(0)).sorted(Comparator.reverseOrder()).map(a->a+"").collect(Collectors.joining());
}
}
IDLE의 도움을 받아서, 그리고 함수가 필요할 때 검색해서 넣으면서 stream 으로 해결해보았다.
s를 각각의 글자로 split 한 뒤, 그것을 char[]
로 바꿔서 역순으로 정렬한다. 이 때 Comparator가 쓰였는데, 이전에도 써봤지만 아무래도 생소하다.
그리고 이것을 다시 stream에 넣어 String[]
으로 바꿔 준 후 String
으로 이어붙여주려 했다.
처음엔 toString() 을 사용하여 출력해봤지만, 해쉬테그 값이 나올 뿐이었다.
그래서 검색해보니 String의 join()
메서드를 사용하면 된다고 해서 Collectors.join()
으로 이어붙였다.
import java.util.Arrays;
public class ReverseStr {
public String reverseStr(String str){
char[] sol = str.toCharArray();
Arrays.sort(sol);
return new StringBuilder(new String(sol)).reverse().toString();
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
ReverseStr rs = new ReverseStr();
System.out.println( rs.reverseStr("Zbcdefg") );
}
}
Arrays.sort()
를 사용하여 배열을 정렬 할 수 있었구나..!!
이것을 깨닫고 나도 다시 풀어보았다.
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
char[] charArr = s.toCharArray();
Arrays.sort(charArr);
for(int i=0;i<s.length();i++) {
answer+=charArr[s.length()-i-1];
}
return answer;
}
}
StringBuilder와 같은 어려운 것을 사용하지 않고 reverse도 직접 for문으로 만들어서 풀이해냈다.
처리 시간은 더 걸렸지만 가독성 측면에선 더 좋다고 생각한다.