Algorithm/Programmers(Java)

[프로그래머스/Lv.1] 문자열 내림차순으로 배치하기

비망노트 2022. 12. 20. 23:58

문제 설명

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

 

제한사항

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

 

입출력 예

s return
"Zbcdefg" "gfedcbZ"

 

 

⭕ 풀이

class Solution {
    public String solution(String str) {
        
        char[] arr = str.toCharArray();
		
        for(int i=0;i<arr.length-1;i++) {
            char temp = arr[i];
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]<arr[j]){
					
                    temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
					
                }
            }
        }
        return String.valueOf(arr);
    }
}

 

✅ 흐름

 

문자열 메서드를 사용하여 풀이를 해야하나 싶다가

결국 무난하게 가장 기본적인 버블정렬을 사용하였다.

 

2중 for문 내에서 입력받은 문자열을 char배열로 바꾼뒤 

비교 후 뒤의 글자가 더 크다면 둘의 위치를 바꾸는 식으로 진행했다.

 

 

 

 

 

 

⭕ 다른분의 풀이

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

 

다른분들의 풀이에서는 주로 Arrays 의 메서드 sort를 사용하고

StringBuilder를 사용해 뒤집는 식으로 진행하였는데

 

Arrays.sort를 사용한 풀이는 속도면에서 균일한 속도를 보여주고

내가 풀이한 버블정렬은 아무래도 시간복잡도가 좋지 못해

보통의 케이스에서는 좀 더 빠른 속도를 보여주지만

특정 케이스에서는 Arrays.sort를 사용한 풀이보다 속도가 더 오래걸린다.

 

 

 

 

 

 

 

 

-출처

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