티스토리 뷰

반응형

문제

문제 출처

programmers.co.kr/learn/courses/30/lessons/12917

문제 설명

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항

  • str은 길이 1 이상인 문자열입니다.

입출력 예

s return
"Zbcdefg" "gfedcbZ"

 

풀이

  1. 입력된 문자열을 한 단어씩 떨어뜨린 문자열 배열로 만든다.
  2. 배열을 정렬한다.
  3. 내림차순으로 배치한다.
import java.util.Arrays;

class Solution {
    public String solution(String s) {
        String[] elements = s.split("");
        Arrays.sort(elements); //오름차순 정렬
        
        String answer = "";
        
        //내림차순으로 배치하기
        for (String e : elements)
            answer = e + answer;
            
        return answer;
    }
}

 

다른 사람의 풀이 - 1

문자열을 char 배열로 만들어 정렬한 다음 StringBuilderreverse()를 이용해 내림차순으로 배치한다.

import java.util.Arrays;

class Solution {
    public String solution(String s) {
        char[] sol = s.toCharArray();
        Arrays.sort(sol);
        return new StringBuilder(new String(sol)).reverse().toString();
    }
}

 

다른 사람의 풀이 - 2

  1. 입력된 문자열을 한 단어씩 떨어뜨린 문자열 배열로 만든다.
  2. 배열을 stream으로 만든다.
  3. stream의 sorted 함수에 Comparator의 reverseOrder를 이용해 문자열들을 내림차순으로 정렬한다.
  4. stream의 collect함수를 이용해 모든 문자열을 하나의 문자열로 연결한다.

코드는 간단하지만 실행시간은 더 오래걸린다.

import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.util.Comparator;

class Solution {
    public String solution(String s) {
        return Stream.of(s.split(""))
        	.sorted(Comparator.reverseOrder())
        	.collect(Collectors.joining());
    }
}

 

참고

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함