본문 바로가기
알고리즘 & 코딩 테스트/[Java]프로그래머스

[프로그래머스_Java] Lv.0 세 개의 구분자

by heosj 2024. 1. 4.

문제 설명

임의의 문자열이 주어졌을 때 문자 “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.ArrayList;
import java.util.List;

class Solution {
    public String[] solution(String myStr) {
        List<String> result = new ArrayList<>(); // 결과를 담을 리스트 생성
        StringBuilder sb = new StringBuilder(); // 임시 문자열을 저장할 객체 생성        
        for (char str : myStr.toCharArray()) {
            if (str == 'a' || str == 'b' || str == 'c') { // 문자가 a, b, c 중 하나인 경우                
                if (sb.length() > 0) { // sb에 문자열이 있는 경우 리스트에 추가 후 초기화                   
                    result.add(sb.toString());
                    sb = new StringBuilder();
                }
            } else { // a,b,c 아닌 경우 sb에 문자열 추가               
                sb.append(str);
            }
        }
        if (sb.length() > 0) { // 반복문 종료 후 sb에 남은 문자열이 있는 경우 리스트에 추가            
            result.add(sb.toString());
        }
        if (result.isEmpty()) { // 빈 배열인 경우 "EMPTY" 반환           
            return new String[]{"EMPTY"};
        } else { // 빈 배열이 아닌 경우 리스트를 배열로 변환하여 반환            
            return result.toArray(new String[0]);
        }
    }
}
  • 'a', 'b', 'c' 를 기준으로 문자열을 나눈다
  • StringBuilder를 활용하여 임시 문자열을 저장하고, 리스트에 추가한다

 

 

프로그래머스

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

programmers.co.kr