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

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

by 블루데이제이 2025. 3. 16.
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
반응형