문자열 내림차순으로 배치하기 (자바)

김재현·2024년 4월 20일
0

알고리즘 풀이

목록 보기
73/90

문제

정답 풀이

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문으로 만들어서 풀이해냈다.
처리 시간은 더 걸렸지만 가독성 측면에선 더 좋다고 생각한다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글