본문 바로가기

Computer Science/알고리즘 문제풀이

Programmes > #23 문자열 내 마음대로 정렬하기 [Python]

문자열 내 마음대로 정렬하기


문제: https://programmers.co.kr/learn/courses/30/lessons/12915




1. 문제 설명


문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.


제한 조건

strings는 길이 1 이상, 50이하인 배열입니다.

strings의 원소는 소문자 알파벳으로 이루어져 있습니다.

strings의 원소는 길이 1 이상, 100이하인 문자열입니다.

모든 strings의 원소의 길이는 n보다 큽니다.

인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.




2. 나의 코드



- n번째 수를 글자의 앞에다 붙인다음, 바로 정렬하면 끝나는 문제.

def solution(strings, n):
    answer = []
    for i in range(len(strings)):
        strings[i] = strings[i][n]+strings[i]    
    
    strings.sort()
    print(strings)
    
    for j in range(len(strings)):
        answer.append(strings[j][1:])
    
    return answer








3. 다른 사람 코드


- lambda를 사용하여 한줄로도 끝낼 수 있다.

def strange_sort(strings, n):
    '''strings의 문자열들을 n번째 글자를 기준으로 정렬해서 return하세요'''
    return sorted(sorted(strings), key=lambda x: x[n]) 

strings = ["sun", "bed", "car"] 
print(strange_sort(strings, 1))


이렇게 n번째 문자를 추출한다음 일일히 비교하는 방법도 있다.


for i in strings:
        min.append(i[n])
        sorted_min = sorted(min)

    while len(result) != len(strings):
        for j in range(0, len(strings)):
            for k in range(0, len(strings)):
                if sorted_min[j] in strings[k][n]:
                    index = k
                    result.append(strings[index])
                    continue



4. 보완


python lambda 복습하기.