TIL/알고리즘

[JAVA] 프로그래머스 | 181866 문자열 잘라서 정렬하기

쑤키다요 2025. 4. 10. 21:46

📝 TIL

- [프로그래머스] 181866 문자열 잘라서 정렬하

 

제한사항

1 ≤ myString ≤ 100,000

myString은 알파벳 소문자로 이루어진 문자열입니다.

 

 

입출력 예

입력#1

"axbxcxdx"

 

출력#1

["a","b","c","d"]


🦔 설계 및 시도

1. split을 이용하여 x를 기준으로 나눈다

2. 이때! xxxaaa와 같은 문자열은 공백이 생기므로.. 

꼭! 빈문자열은 걸러주는 작업을 해야한다.

3. 남은 문자열 정렬하여 배열로 반환하기

 

 

🔥 풀이에 사용된 개념

Split(String regex)

괄호 안의 regex, 정규 표현식을 기준으로 문자열을 나눌 수 있다

isEmpty()

문자열이 빈 문자열인지 확인! if문과 주로 함께쓰고 빈문자열이면 true

list.toArray(new String[0])

List를 Array 배열로 바꿀 때 사용

배열로 반환해야 할 때, return과 함께 사용한다.


 

💡 풀이 소스 코드

 

[ 나의 풀이 ]

시간복잡도 : O(n log n)

공간복잡도 : O(n) - 리스트 및 반환 배열 저장

 

import java.util.*;
class Solution {
    public String[] solution(String myString) {
        String[] arr= myString.split("x");
        List<String> list = new ArrayList<>();
        
        for(String a : arr){
            if(!a.isEmpty()) {
                list.add(a);
            }
        }
        Collections.sort(list);
    
        return list.toArray(new String[0]);
    }

 

 

지난 번 문자열을 문자 단위로 입력받을 때 사용했던 StringTokenizer를 활용하는 방법도 있어 풀이한다.

stringTokenizer를 사용하면 구분자를 제외하고 문자열을 만들며, 따라서 빈 문자열이 발생하지 않는다!

 

import java.util.*;

class Solution {
    public String[] solution(String myString) {
    	// x를 제외하고 문자열 만들기
        StringTokenizer st = new StringTokenizer(myString, "x");
        int idx = 0;
        int n = st.countTokens();
        
        String[] result = new String[n];
        // 배열로 나누기
        for (int i = 0; i < n; i++)
            result[idx++] = st.nextToken();
		// 정렬
        Arrays.sort(result);
        
        return result;
    }
}

 


🚀 새로 배운 내용

- 빈 문자열을 판단할 때 isEmpty를 이용하자!

 


😺  느낀점

- 간단한 문제였지만 빈 문자열을 처리하지 않으면 문제를 틀린다.. (주의하기)- 배열 -> 리스트 변환 등 타입을 정확하게 파악하자.

 


*소스 코드는 다음 깃허브에 올라옵니다 -
 https://github.com/s0ooo0k/Algorithm_Study

 

GitHub - s0ooo0k/Algorithm_Study: Algorithm Study 문제 및 풀이

Algorithm Study 문제 및 풀이. Contribute to s0ooo0k/Algorithm_Study development by creating an account on GitHub.

github.com