본문 바로가기
코딩테스트/프로그래머스 기초

[코딩테스트 Lv.0] 세 개의 구분자

by 블루데이제이 2025. 2. 8.
728x90
반응형
문제 설명

임의의 문자열이 주어졌을 때 문자 "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 합니다.

내 풀이
Java
import java.util.*;
class Solution {
    public String[] solution(String myStr) {
        String[] answer = {};
        
        myStr = myStr.replaceAll("[abc]"," ");
        String[] arr = myStr.split(" ");
        
        
        ArrayList<String> list = new ArrayList<>();
        for(String s: arr){
            if(!s.equals("")){
                list.add(s);
            }
        }
        
        if(list.isEmpty()) return new String[]{"EMPTY"};
        
        answer = list.toArray(new String[list.size()]);
        
        return answer;
    }
}
C
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char** solution(const char* myStr) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char** answer = (char**)malloc(sizeof(char*));
    
    char* ptr = strtok(myStr, "abc");
    int k = 0;
    
    answer[0] = strdup("EMPTY");
    
    while(ptr != NULL){
        answer = realloc(answer,(k + 1) * sizeof(char*));
        answer[k++] = strdup(ptr);
        ptr = strtok(NULL, "abc");
    }
    
    return answer;
}
Python
import re
def solution(myStr):
    answer = []
    
    arr = re.sub('[abc]',' ', myStr).split(" ")
    
    for s in arr:
        if s != '':
            answer.append(s)
   
    if len(answer) == 0:
        answer.append('EMPTY')
    
    return answer

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

728x90
반응형