코딩테스트/프로그래머스 기초

[코딩테스트 Lv.0] 접미사 배열

블루데이제이 2025. 3. 16. 21:40
728x90
반응형
문제 설명

어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

제한사항
my_string은 알파벳 소문자로만 이루어져 있습니다.
1 ≤ my_string의 길이 ≤ 100
입출력 예
my_string	result
"banana"	["a", "ana", "anana", "banana", "na", "nana"]
"programmers"	["ammers", "ers", "grammers", "mers", "mmers", "ogrammers", "programmers", "rammers", "rogrammers", "rs", "s"]
입출력 설명
입출력 예 #1
예제 1번의 my_string는 "banana"로 모든 접미사는 문제의 설명과 같습니다. 이를 사전순으로 정렬하면 "a", "ana", "anana", "banana", "na", "nana"이므로 ["a", "ana", "anana", "banana", "na", "nana"]를 return 합니다.

입출력 예 #2
예제 2번의 my_string는 "programmers"이고 모든 접미사는 "programmers", "rogrammers", "ogrammers", "grammers", "rammers", "ammers", "mmers", "mers", "ers", "rs", "s"입니다. 이를 사전순으로 정렬한 문자열 배열 ["ammers", "ers", "grammers", "mers", "mmers", "ogrammers", "programmers", "rammers", "rogrammers", "rs", "s"]를 return 합니다.

내 풀이
Java
import java.util.*;
class Solution {
    public String[] solution(String my_string) {
        String[] answer = {};
        List<String> list = new ArrayList<>();
        
        for(int i = my_string.length(); i > 0; i--){
            list.add(my_string.substring(i - 1, my_string.length()));
        }
        
        Collections.sort(list);
        
        answer = new String[list.size()];
        for(int i = 0; i < list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}
C
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char** solution(const char* my_string) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char** answer = (char**)malloc(sizeof(char*) * strlen(my_string));
    
    int i;
    for(i = 0; i < strlen(my_string); i++){
        answer[i] = &my_string[i];
    }
    
    char* tmp = NULL;
    for(i = 0; i < strlen(my_string); i++){
        for(int j = 0; j < strlen(my_string); j++){
            if(strcmp(answer[i], answer[j]) < 0){
                tmp = answer[j];
                answer[j] = answer[i];
                answer[i] = tmp;
            }
        }
    }
    
    return answer;
}
Python
def solution(my_string):
    answer = [my_string[i:] for i in range(len(my_string))]
    answer = sorted(answer)
    return answer

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

 

프로그래머스

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

programmers.co.kr

 

728x90
반응형