
내가 생각했을때 문제에서 원하는부분
문자열 myString이 주어집니다.
"x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 빈 문자열은 반환할 배열에 넣지 않습니다.
내가 이 문제를 보고 생각해본 부분
myString.split("x") 구문을 이용해 입력된 문자열을 문자 "x"를 기준으로 자른다.
이때 "x"가 연속되거나 문자열 시작/끝에 있을 경우 빈 문자열이 생긴다.
Arrays.stream(parts).filter(s -> !s.isEmpty()) 부분에서 분할된 배열 중 빈 문자열("")인 요소는 제거한다.
이는 "x"가 연속되거나 문자열의 앞뒤에 있을 때 불필요한 빈 항목을 배제하기 위함이다.
.sorted()는 스트림의 요소들을 사전순(알파벳 순서)으로 정렬시킨다.
따라서 "axbxcxdx"는 잘라낸 ["a","b","c","d"]가 이미 정렬된 상태이며, "dxccxbbbxaaaa"의 경우에도 분리된 배열 ["d","cc","bbb","aaaa"]가 ["aaaa","bbb","cc","d"]로 정렬된다.
.toArray(String[]::new)로 처리한 결과 스트림을 다시 문자열 배열로 변환해 반환한다.
코드로 구현
import java.util.Arrays;
class Solution {
public String[] solution(String myString) {
String[] parts = myString.split("x");
return Arrays.stream(parts)
.filter(s -> !s.isEmpty())
.sorted()
.toArray(String[]::new);
}
}
프로그래머스 코드
package programmers;
import java.util.Arrays;
// 프로그래머스 문자열 잘라서 정렬하기
public class Main79 {
public static void main(String[] args) {
String myString1 = "axbxcxdx";
String myString2 = "dxccxbbbxaaaa";
System.out.println(Arrays.toString(solution(myString1))); // [a, b, c, d]
System.out.println(Arrays.toString(solution(myString2))); // [aaaa, bbb, cc, d]
}
public static String[] solution(String myString) {
String[] parts = myString.split("x");
return Arrays.stream(parts)
.filter(s -> !s.isEmpty())
.sorted()
.toArray(String[]::new);
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.