[프로그래머스] 91. 세 개의 구분자

최재원's avatar
Oct 11, 2025
[프로그래머스] 91. 세 개의 구분자
💡

문제 설명

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

제한사항

  • 1 ≤ myStr의 길이 ≤ 1,000,000
    • myStr은 알파벳 소문자로 이루어진 문자열 입니다.

입출력 예

myStr
result
"baconlettucetomato"
["onlettu", "etom", "to"]
"abcd"
["d"]
"cabab"
["EMPTY"]

입출력 예 설명

입출력 예 #1
  • 문제 설명의 예시와 같습니다.
입출력 예 #2
  • "c" 이전에는 "a", "b", "c" 이외의 문자가 없습니다.
  • "c" 이후에 문자열 "d"가 있으므로 "d"를 저장합니다.
  • 따라서 ["d"]를 return 합니다.
입출력 예 #3
  • "a", "b", "c" 이외의 문자가 존재하지 않습니다. 따라서 저장할 문자열이 없습니다.
  • 따라서 ["EMPTY"]를 return 합니다.
 

코드

import java.util.*; class Solution { public String[] solution(String myStr) { List<String> resultList = new ArrayList(); StringBuilder word = new StringBuilder(); for(int i = 0; i < myStr.length(); i++) { char currentChar = myStr.charAt(i); if(currentChar == 'a' || currentChar == 'b' || currentChar == 'c') { if(word.length() > 0) { // 빈 문자열 방지 resultList.add(word.toString()); // 리스트에 추가 word.setLength(0); // 초기화 } } else { word.append(currentChar); } } if (word.length() > 0) { resultList.add(word.toString()); } if(resultList.size() == 0) { resultList.add("EMPTY"); } return resultList.toArray(new String[0]); } }
notion image
 

split + 정규표현식 방법

import java.util.*; class Solution { public String[] solution(String myStr) { // 1. 정규표현식으로 문자열을 분리합니다. // 정규표현식 "[abc]+"는 'a' 또는 'b' 또는 'c' 문자가 // 하나 이상('+' 기호) 연속된 패턴을 구분자로 사용하라는 의미입니다. // String.split()은 구분자로 사용된 문자열을 기준으로 문자열을 나눕니다. String[] tempResult = myStr.split("[abc]+"); // 2. 결과 배열(tempResult)을 List로 변환하고 빈 문자열("")을 제거합니다. // split() 메서드는 문자열 시작이나 끝에 구분자가 있거나, // 구분자가 연속으로 나올 경우 빈 문자열("")을 배열 요소로 생성합니다. // 문제 조건 "두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며"를 만족시킵니다. List<String> resultList = new ArrayList<>(); for (String s : tempResult) { if (!s.isEmpty()) { // 빈 문자열("")이 아닌 경우에만 리스트에 추가 resultList.add(s); } } // 3. 최종 요구사항에 맞춰 처리합니다. if (resultList.isEmpty()) { return new String[]{"EMPTY"}; } // 4. List를 String 배열로 변환하여 반환합니다. return resultList.toArray(new String[0]); } }
notion image
 
Share article

jjack1