48. [Java] 문자열 잘라서 정렬하기
https://school.programmers.co.kr/learn/courses/30/lessons/181866
- 문자열 myString이 주어진다.
- "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return
- 단, 빈 문자열은 반환할 배열에 넣지 않는다.
- 1 ≤ myString ≤ 100,000
- myString은 알파벳 소문자로 이루어진 문자열이다.
정답코드
import java.util.*;
class Solution {
public String[] solution(String myString) {
// 1. "x" 기준으로 자르기
String[] splited = myString.split("x");
// 2. 빈 문자열 제거
List<String> list = new ArrayList<>();
for (String s : splited) {
if (!s.isEmpty()) {
list.add(s);
}
}
// 3. 오름차순 정렬
Collections.sort(list);
// 4. list → String[]
return list.toArray(new String[0]);
}
}
"x"
를 기준으로 문자열을 나눠서 배열로 만든다.split
후 생길 수 있는""
(빈 문자열)을 제외한다.- 남은 문자열들을 오름차순(사전순)으로 정렬한다.
오답
import java.util.*;
class Solution {
public String[] solution(String myString) {
String[] answer = myString.split("x");
Arrays.sort(answer);
return answer;
}
}
문제에 빈 문자열은 포함하지 않는다는 조건이 있는데 해당 처리를 하지 않아서 테스트를 통과하지 못했다. 그래서 빈 문자열 제거하는 로직을 넣어서 수정했다. 빈 문자열 제거는 배열로는 안되고 몇 개가 제거될 지 모르기 때문에 가변리스트 ArrayList 를 선언했다. split()메서드로 나눈 배열을 순회하며 요소가 비어있지 않을 때만 List에 추가했다. 그 후 List를 String[]으로 변환해서 반환했다.
Stream을 활용한 코드
import java.util.*;
class Solution {
public String[] solution(String myString) {
return Arrays.stream(myString.split("x"))
.filter(s -> !s.isEmpty())
.sorted()
.toArray(String[]::new);
}
}
- 문자열 자르기
myString.split("x")
로"x"
기준 나눔 - 빈 문자열 제거
.filter(s -> !s.isEmpty())
로 공백 요소 제거 - 사전순 정렬
.sorted()
로 오름차순 정렬 - 배열로 변환
.toArray(String[]::new)
로 다시String[]
배열로 리턴