![프로그래머스 Lv.0 문자열 잘라서 정렬하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdotIE6%2FbtsDroawwK2%2FYzXiCHMKafVtk4Vukls4ck%2Fimg.png)
프로그래머스 Lv.0 문자열 잘라서 정렬하기개발자가 되기까지 (2023.08.16~2024.04.15)/[Algorithm] Programmers ver.Java2024. 1. 13. 02:41
Table of Contents
<Solution>
import java.util.*;
class Solution {
public String[] solution(String myString) {
String[] str = myString.split("x+");
String[] answer;
// 모두 'x'인 경우
boolean allX = true;
for (int i = 0; i < myString.length(); i++) {
if (myString.charAt(i) != 'x') {
allX = false;
break;
}
}
if (allX) {
answer = new String[]{""};
} else {
answer = Arrays.copyOf(str, str.length);
// 빈 문자열 제거
answer = Arrays.stream(answer)
.filter(s -> !s.isEmpty())
.toArray(String[]::new);
Arrays.sort(answer);
}
return answer;
}
}
x가 1개 이상일 때 기준으로 split을 해서 str 배열에 먼저 담아주었다.
String[] str = myString.split("x+");
이 때 문제점이 2가지가 발생하는데,
하나는 myString의 문자가 모두 x 일 때.
나머지 하나는 str[0] = ""; 일 때이다.
이 때문에, String[] answer 값을 선언만 해주고 길이를 정해주지 못했다.
그래서 첫 번째 문제를 해결하기 위해 boolean을 활용해서
myString의 문자가 모두 x일 때는 true, 아닐 때는 false가 되도록 for문을 돌렸다.
boolean allX = true;
for (int i = 0; i < myString.length(); i++) {
if (myString.charAt(i) != 'x') {
allX = false;
break;
}
}
allx가 true일 때, answer의 배열에 ""가 저장되도록 선언한다.
if (allX) {
answer = new String[]{""};
}
allx가 false 일 때, 먼저 str배열을 answer에 복사한다.
그 후, 빈 문자열을 제거하기 위해 stream을 사용했다.
else {
answer = Arrays.copyOf(str, str.length);
// 빈 문자열 제거
answer = Arrays.stream(answer)
.filter(s -> !s.isEmpty())
.toArray(String[]::new);
Arrays.sort(answer);
}
stream 부분에 대해서 설명하자면
(size) -> new String[size]와 같은 의미를 나타내는 (String[]::new)를 사용하여 배열로 만들어 주는데
.toArray(String[]::new)
filter를 사용해서 각 요소를 의미하는 s가 비어있지 않은 것만 걸러내준다.
.filter(s -> !s.isEmpty())
마지막으로 Arrays.sort() method를 사용해서 배열을 정렬해 주었다.
728x90
@rlozlr :: 얼렁뚱땅 개발자
얼렁뚱땅 주니어 개발자
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!