[Java] 알고리즘, 문자열 내림차순으로 배치하기

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

문제 설명

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.

s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.


제한 사항

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


입출력 예

s

 return

 Zbcdefg

 gfedcbZ


나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.*;
class Solution {
  public String solution(String s) {
      String answer = "";
      char[] temp = s.toCharArray();
      int[] intTemp = new int[temp.length];
      for(int i =0; i<temp.length; i++){
          intTemp[i]=(int)temp[i];
      }
      Arrays.sort(intTemp);
      for(int i =0; i<intTemp.length; i++){
          temp[intTemp.length-1-i]= (char)intTemp[i];
      }
      answer = new String(temp);
      return answer;
  }
}
cs


이 전에 풀던 것과 유사합니다. 문자열을 char 배열로 변환하였고, Arrays.sort 메소드를 이용해 우선 오름차순 정렬을 한 후 , for문을 돌려서 이를 다시 내림차순으로 인위적으로 바꾸는 작업을 진행했습니다. 역시나 int형과 char형의 형변환에 대해서 잘 알아야 풀 수 있는 방법입니다. 


다른사람의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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") );
    }
}
cs


보시면 제 풀이랑 비슷한 방식인데 저는 뭐가 저리 쓴게 많을까요... 저도 이분도 간단히 말하면 먼저 char 배열로 만들고, Arrays.sort로 오름차순 정렬을 하고 오름차순이 아니라 내림차순을 해야하므로 이를 다시 뒤집는 결과를 냈습니다. 근데 같은 알고리즘 흐름인데도 사용하는 객체에 대해서 이렇게 차이가 나네요 ㅎㅎ 더 열심히 노력해야겠습니다. 저는 인위적으로 내림차순을 하였다면 이분은 StringBuilder 객체의 reverse() 내장함수를 이용해서 문자열이 다시 뒤집히도록 하셨네요. 저는 StringBuilder에 저런 메소드가 있는지 몰랐기 때문에 저런 복잡한 과정을 했네요...ㅠㅠ 앞으로 기억해두겠습니다. StringBuilder 객체의 reverse() 메소드....


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.util.Comparator;
 
public class ReverseStr {
    public String reverseStr(String str){
        return Stream.of(str.split(""))
    .sorted(Comparator.reverseOrder())
    .collect(Collectors.joining());
    }
 
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        ReverseStr rs = new ReverseStr();
        System.out.println( rs.reverseStr("Zbcdefg") );
    }
}
cs


Stream... 너무 어려워요 ㅠㅠㅠ 아시는분 혹시 댓글로 작성좀 부탁드립니다ㅠㅠ 고수님

댓글

Designed by JB FACTORY