[js] 접미사 배열

sookyoung.k·2024년 6월 17일
1
post-thumbnail

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

제한사항

  • my_string은 알파벳 소문자로만 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 100

나의 풀이

function solution(my_string) {
    let string = [...my_string];
    
    return string.map((v, i, arr) => {
        return arr.slice(i).join('');
    }).sort();
}
  • 먼저 my_string을 배열로 변환한다. 이게 편할 것 같아서 먼저 변환해줬다.
  • 각 요소에 대해서 map() 메서드를 사용한다.
    • 현재 요소는 v로 (안썼으니까 _로 대체해도 될듯), 현재 인덱스는 i로, 배열 전체를 arr로 세 개의 인자를 받는다.
    • arr.slice(i)를 통해 인덱스 i부터 배열의 끝까지 부분 배열을 반환한다.
    • join('')을 통해서 문자열로 변환한 후
  • map() 메서드의 결과로 나온 배열을 sort() 메서드를 통해 사전 순으로 정렬한다.

아~ 배열은 풀어도 풀어도 어렵다. 순서에 집착하느라 ㅋㅋㅋ 처음에 배열을 거꾸로 뒤집고, map() 메서드 안에 return arr.slice(0, i + 1).join('');를 줘서 풀고 있었다. 뭔가 이상함을 깨닫고 reverse()를 지웠지만... 난 접두사 배열을 만들고 있었다 ^^ 순서에 집착하지 않고 코드를 천천히 다시 생각해보니까 이게 되네 ㅠ slice()를 자주 써도 계속 헷갈린다. 파이팅...

다른 풀이 1

function solution(my_string) {
  return Array.from(my_string)
    .map((_, i) => my_string.substring(i))
    .sort();
}
  • 이 분은 my_string을 Array.from(my_string)으로 배열로 바꿔줬다.
  • map() 메서드를 사용해서 풀이하였다. substring(i)를 사용해서 특정 인덱스부터 끝까지의 부분 문자열을 반환한다.
  • sort() 메서드로 사전순 정렬하였다.

다른 풀이 2

function solution(st) {
    var answer = [];

    for(let i = 0; i<st.length; i++){
        answer.push(st.substr(i,st.length))
    }

    return answer.sort();
}
  • st.substr(i, st.length)는 문자열 st의 인덱스 i부터 끝까지의 부분 문자열을 반환한다.
profile
영차영차 😎

0개의 댓글