본문 바로가기

Algorithm/Programers - Java

[프로그래머스(Java)] 세 개의 구분자 / Stream, split

 

Level. 0

 

문제

임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.
문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.

* 제한사항
- 1 ≤ myStr의 길이 ≤ 1,000,000
- myStr은 알파벳 소문자로 이루어진 문자열 입니다.

 

 

풀이

import java.util.*;

class Solution {
    public String[] solution(String myStr) {
        String[] answer = {} ;
        String[] sp = myStr.split("[abc]");
        ArrayList<String> list = new ArrayList<String>();
        
        for(int i=0; i<sp.length; i++){
            if(!sp[i].equals("") ) list.add(sp[i]);
        }
        
        answer = list.toArray(new String[list.size()]);
        if(answer.length == 0){
            answer = new String[1];
            answer[0] = "EMPTY";
        }
        return answer;
    }
}

 

String[] sp = myStr.split("[abc]");

- [abc] : a 또는 b 또는 c 를 포함한 문자열을 매칭시키는 정규식이다. (a|b|c) 와 동일하다. 

 

 

* 정규식 참고 링크

https://chrisjune-13837.medium.com/%EC%A0%95%EA%B7%9C%EC%8B%9D-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-%EC%98%88%EC%A0%9C%EB%A5%BC-%ED%86%B5%ED%95%9C-cheatsheet-%EB%B2%88%EC%97%AD-61c3099cdca8

 

[정규식] 핵심만 모아놓은 Cheat Sheet

예제를 통하여 정규식의 핵심적인 내용만 깊이있게 알아봅니다

chrisjune-13837.medium.com

 


다른 풀이

import java.util.Arrays;

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;
    }
}
  • [abc]+ : 1개 이상의 a 또는 b 또는 c 를 포함한 문자열을 매칭한다. 

 


https://school.programmers.co.kr/learn/courses/30/lessons/181862

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr