📝 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
'TIL > 알고리즘' 카테고리의 다른 글
[JAVA] 프로그래머스 | 12932 자연수 뒤집어 배열로 만들기 (0) | 2025.04.10 |
---|---|
[JAVA] 프로그래머스 | 42746 가장 큰 수 (0) | 2025.04.09 |
[Java] 프로그래머스 | 120880 특이한 정렬 (1) | 2025.04.09 |
[JAVA] 프로그래머스 | 42748 K번째 수 (0) | 2025.04.07 |
[JAVA] 백준 | 15819 너의 핸들은 (0) | 2025.04.07 |