프로그래머스 세 개의 구분자

KIMYEONGJUN·2026년 7월 16일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

내가 이 문제를 보고 생각해본 부분

myStr.split("[abc]") 메서드를 사용하여 문자열을 "a", "b", "c"라는 문자들을 기준으로 나눈다.
이때 구분자 문자는 배열에서 제거되고, 그 사이에 있는 문자들만 배열 요소로 분리된다.
나뉘어진 부분 문자열 배열에서 빈 문자열(즉, 연속된 구분자 사이에 문자 없는 경우)을 걸러내기 위해, 반복문으로 각 요소를 순회하며 빈 문자열이 아닌 경우에만 리스트에 추가한다.
이렇게 하면 두 구분자 사이에 문자가 없을 때 빈 문자열이 결과에 포함되지 않는다.
리스트가 비어 있으면, 즉 "a", "b", "c" 이외의 문자가 전혀 없어서 저장할 substring이 하나도 없으면 ["EMPTY"]라는 배열을 반환한다.
그렇지 않으면, 리스트를 배열로 변환하여 최종 결과로 반환한다.

코드로 구현

import java.util.*;

class Solution {
    public String[] solution(String myStr) {
        String[] parts = myStr.split("[abc]");

        List<String> result = new ArrayList<>();
        for (String part : parts) {
            if (!part.isEmpty()) {
                result.add(part);
            }
        }

        if (result.isEmpty()) {
            return new String[]{"EMPTY"};
        }

        return result.toArray(new String[0]);
    }
}

프로그래머스 코드

package programmers;

import java.util.*;

// 프로그래머스 세 개의 구분자
public class Main83 {
    public static void main(String[] args) {
        Solution12 sol = new Solution12();
        // 테스트 예시
        String[] result = sol.solution("baconlettucetomato");
        System.out.println(Arrays.toString(result));  // [onlettu, etom, to]

        result = sol.solution("abcd");
        System.out.println(Arrays.toString(result));  // [d]

        result = sol.solution("cabab");
        System.out.println(Arrays.toString(result));  // [EMPTY]
    }
}

class Solution12 {
    public String[] solution(String myStr) {
        // "a", "b", "c"를 기준으로 문자열 분리
        String[] parts = myStr.split("[abc]");

        // 빈 문자열은 제외
        List<String> result = new ArrayList<>();
        for (String part : parts) {
            if (!part.isEmpty()) {
                result.add(part);
            }
        }

        // 결과가 없으면 ["EMPTY"] 리턴
        if (result.isEmpty()) {
            return new String[]{"EMPTY"};
        }

        return result.toArray(new String[0]);
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글