본문 바로가기
Algorithm/프로그래머스

[프로그래머스]연습문제 : 문자열 내림차순으로 배치하기 (level 1)

by HBGB 2019. 11. 6.

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

 

코딩테스트 연습 - 문자열 내림차순으로 배치하기 | 프로그래머스

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 제한 사항 str은 길이 1 이상인 문자열입니다. 입출력 예 s return Zbcdefg gfedcbZ

programmers.co.kr

 

방법 1: 아스키 코드 활용...

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
import java.util.Arrays;
import java.util.Collections;
 
class Solution {
    public String solution(String s) {
        
      // String -> Integer배열
      Integer[] arrInteger = new Integer[s.length()];
      
      for (int i = 0; i < s.length(); i++) {
        arrInteger[i] = (int)s.charAt(i);
      }
      
      // 내림차순 정렬
      Arrays.sort(arrInteger, Collections.reverseOrder());
      
      // Integer배열 -> String
      StringBuilder sb = new StringBuilder();
      
      for (int i = 0; i < arrInteger.length; i++) {
        int temp = arrInteger[i];
        sb.append((char)temp);
      }
      
        return sb.toString();
    }
}
Colored by Color Scripter

 

방법 2: StringBuilder.reverse() 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Arrays;
 
class Solution {
    public String solution(String s) {
      
      // String -> char배열
      char[] arrChar = s.toCharArray();
      
      // 오름차순 정렬
      Arrays.sort(arrChar);
      
      // char배열 -> String
      StringBuilder sb = new StringBuilder(new String(arrChar));
      
      // StringBuilder 역순배치
      sb.reverse();
      
        return sb.toString();
    }
}
Colored by Color Scripter

 

TIP1

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

문제의 요건 덕분에 가능한 풀이방법이다. 

 

Arrays.sort() 내부적으로도 문자는 아스키 크기를 기준으로 비교하는 듯하다. 

(아스키 코드 기준: 대문자가 소문자보다 더 '작다')

 

TIP2

StringBuilderreverse함수가 있는지 처음 알았다. 

정렬은 아니고, 인덱스 순서를 반대로 한다. 

 

댓글