본문 바로가기

프로그래머스(Java)/Level 0

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

728x90

코드 힌트

split, replaceAll를 하지 않은 힌트(정답에는 적어놓겠습니다.)

  1. 문자열을 구분자에 따라 나누기:
    • 문자열에서 특정 문자('a', 'b', 'c')를 기준으로 문자열을 나누는 문제입니다.
    • 각 문자와 구분자가 있을 때까지 계속해서 문자열을 모은 후, 구분자가 나오면 모은 문자열을 저장하고 다시 초기화합니다.
  2. 문자열 저장과 초기화:
    • StringBuilder를 사용하여 구분자가 나오기 전까지 문자를 저장합니다.
    • 구분자가 나오면 StringBuilder의 내용을 리스트에 저장하고 초기화합니다.
  3. 리스트를 배열로 변환:
    • 구분자를 기준으로 나눈 문자열들을 리스트에 저장한 후, 최종적으로 이 리스트를 배열로 변환합니다.
  4. 특별한 경우 처리:
    • 구분자가 전혀 없는 경우, 빈 문자열 리스트를 반환하지 않도록 "EMPTY"를 반환합니다.

정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public String[] solution(String myStr) {
        // a, b, c 문자로 구분된 문자열을 저장할 리스트와 StringBuilder 초기화
        List<String> list = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        
        // 문자열의 각 문자를 순회
        for (int i = 0; i < myStr.length(); i++) {
            char c = myStr.charAt(i);
            
            // 현재 문자가 'a', 'b', 'c' 중 하나이면서 StringBuilder에 저장된 내용이 있을 때
            if ((c == 'a' || c == 'b' || c == 'c') && sb.length() > 0) {
                list.add(sb.toString()); // StringBuilder에 저장된 문자열을 리스트에 추가
                sb.setLength(0);  // StringBuilder를 초기화
            } 
            // 현재 문자가 'a', 'b', 'c'가 아닌 경우
            else if (c != 'a' && c != 'b' && c != 'c'){
                sb.append(c); // 현재 문자를 StringBuilder에 추가
            }
        }
        
        // 반복문이 끝난 후에도 StringBuilder에 저장된 내용이 있다면 리스트에 추가
        if (sb.length() > 0) {
            list.add(sb.toString());
        }
        
        // 리스트가 비어있다면 "EMPTY"를 반환
        if (list.size() == 0) {
            return new String[]{"EMPTY"};
        }
        
        // 리스트의 내용을 배열로 변환하여 반환
        String[] result = new String[list.size()];
        for (int i = 0; i < result.length; i++) {
            result[i] = list.get(i);
        }
        
        return result;
    }
}

 

class Solution {
    public String[] solution(String myStr) {
        // 'a', 'b', 'c'를 포함하는 연속된 부분 문자열을 공백으로 대체하고 앞뒤 공백을 제거한 후, 공백을 기준으로 문자열을 분할합니다.
        String[] result = myStr.replaceAll("[abc]+", " ").trim().split(" ");
        
        // 결과 배열의 첫 번째 요소가 빈 문자열인 경우, 입력 문자열에 'a', 'b', 'c' 외의 문자가 없었음을 의미합니다.
        // 이 경우, 결과 배열에 "EMPTY"를 반환합니다.
        if (result[0].isEmpty())
            return new String[]{"EMPTY"};
        
        // 그 외의 경우, 분할된 문자열 배열을 반환합니다.
        return result;
    }
}
728x90