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

[Python] 프로그래머스 lv.0 접미사 배열

위시리 2024. 10. 20. 16:43

 

문제 분석

  • 접미사란 특정 인덱스부터 시작하는 문자열
  • string이 주어질 때 모든 접미사를 사전순으로 정렬하여 return

 

코드 설계

  • 입력받은 문자열에 대해 문자열 길이만큼 반복하면서 접미사 추출 : list에 append
  • 접미사를 추출하기 위한 반복문에서 파이썬의 slice 특징에 따라 반복문은 1부터 len(str) + 1까지
for i in range(1, len(my_string)+1): 
    suffix.append(my_string[:i])
  • b, ba, ban. bana .. 가 아니라 banana, anana, nana .. 이 접미사
  • 수정
for i in range(0, len(my_string)):
    suffix.append(my_string[i:])
  • 접미사 list를 사전 순서로 정렬 : sort( ) or sorted( )
  • 문자열도 파이썬에서 sort 메소드로 정렬 가능

 

  • arr.sort( ) Vs. sort(arr)
arr = [2,5,4,1,3]

# sorted() : 변형 X, 정렬된 새로운 배열 반환
print(sorted(arr)) # [1, 2, 3, 4, 5]
print(arr)         # [2, 5, 4, 1, 3]

# sort() : 변형 O, 반환 값은 없음
print(arr.sort())  # None
arr.sort()
print(arr)         # [1, 2, 3, 4, 5]
  • sorted(arr) : arr 배열을 변형하지 않고, arr 배열이 오름차순으로 정렬된 새로운 정렬 반환
  • arr.sort( ) : arr 배열을 오름차순으로 변형하고 반환 x

 

정답 코드

def solution(my_string):
    answer = []
    suffix = [] # 접미사 배열
    for i in range(0, len(my_string)):
        suffix.append(my_string[i:])
    answer = sorted(suffix)
    return answer

 

다른 사람 코드 1

def solution(my_string):
    answer = []
    for i in range(len(my_string)):
        answer.append(my_string[-i:])
    answer.sort()
    return answer

 

다른 사람 코드 2

def solution(my_string):
    return sorted(my_string[i:] for i in range(len(my_string)))