저는 split을 사용해서 문자열을 나누어 준 다음 ArrayList를 사용해 문자열의 길이를 비교해주는 방법을 생각했습니다!
import java.util.*;
class Solution {
public String[] solution(String myStr) {
String[] s = myStr.split("[abc]");
ArrayList <String> list = new ArrayList();
for(String str : s){
if(str.length() > 0) list.add(str);
}
if(list.size() == 0) list.add("EMPTY");
String[] answer = new String[list.size()];
int n = 0;
for(String str : list) answer[n++] = str;
return answer;
}
}
s String 배열에 [abc]를 기준으로 나누게 했습니다! 이렇게 하면 bear의 경우 [ "", e, "", r ] 와 같이 나오는 문제가 생깁니다!
따라서 ArrayList를 만든 후 s 배열의 str의 길이를 비교해 길이가 0보다 크면 list에 넣어주었습니다.
조건에서 array가 비어있다면 "EMPTY"를 넣으라고 했기 때문에 list의 길이가 0이면 EMPTY라는 글자를 넣어줬습니다!
list가 완성되었다면 answer에 값을 넣어주면 됩니다!
이렇게 하면~
정답!!
하지만 다른 분의 코드를 보니까 stream을 사용하는 방법도 있더라구요!
전 아직 stream을 잘하지는 않지만 그래도 이해할 수 있고 훨씬 효율적인 코드인 것 같아서 가져와봤습니다!
import java.util.*;
class Solution {
public String[] solution(String myStr) {
String[] arr = Arrays.stream(myStr.split("[abc]")).filter(str -> !str.isEmpty()).toArray(String[]::new);
return arr.length == 0 ? new String[] {"EMPTY"} : arr;
}
}
제가 이해한 만큼 분석해보겠습니다!
그전에!! Stream은 무엇일까?!
Stream 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있고, 병렬처리가 가능하게 해줍니다~
이 문제같은 경우 Stream을 배열과 사용할 것이기 때문에 Arrays.stream을 사용해줍니다!
myStr을 [abc]를 사용해 나누어진 결과 중 filter를 사용해 str 중 비어있는 값들을 제거해줍니다!비어있는 값들을 모두 제거하고 나면 toArray를 사용해 List를 String 배열로 바꿔줍니다!
마지막으로 arr의 길이가 0이라면 "EMPTY"가 들어있는 새로운 배열을 생성하고 0이 아니라면 arr을 return해줍니다!
Stream을 사용하니까 확실히 코드가 더 간결해지고 가독성도 좋아진 것 같습니다.. 앞으로 Stream을 더 많이 사용해봐야겠습니다!
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 가격대 별 상품 개수 구하기 (0) | 2023.12.20 |
---|---|
프로그래머스 - 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2023.12.20 |
프로그래머스 - 과일로 만든 아이스크림 고르기 (0) | 2023.12.19 |
프로그래머스 - 평균 일일 대여 요금 구하기 (0) | 2023.12.19 |
프로그래머스 - 12세 이하인 여자 환자 목록 출력하기 (0) | 2023.12.19 |