[프로그래머스] - 문자열 내 마음대로 정렬하기

SeomIII·2021년 7월 9일
0

programmers_LEVEL1

목록 보기
20/34
post-thumbnail

문제 설명

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

제한 조건
strings는 길이 1 이상, 50이하인 배열입니다.
strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
모든 strings의 원소의 길이는 n보다 큽니다.
인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

문제 보기

생각 과정
1. string의 각 단어의 인덱스와 n번째 글자를 딕셔너리로 만들고, n번째 글자기준으로 정렬 후, 단어의 인덱스를 이용해서 배열을 만들면 되지 않을까?
2. 같은 문자열이 여럿일 경우는 어찌 해결해주지?
--> 처음 들어올 때부터 정렬해주고 그 다음에 해결하면 고려해주지 않아도 되겠구만

문제 풀이

def solution(strings, n):
    answer= []
    n_index={}
    counter=0
    
    # 먼저 strings를 정렬하고 하면 문자가 같을 때 고려해줄 필요가 없잖아
    sort_strings=sorted(strings)
    print(sort_strings)
    
    # "단어의 인덱스" : n번째 글자 딕셔너리
    for s in sort_strings :
        n_index[counter]=s[n]
        counter+=1
    
    # n번째 글자 기준으로 정렬
    my_sort=sorted(n_index.items(),key=lambda x:x[1])
    
    for i in range(len(my_sort)):
        answer.append(sort_strings[my_sort[i][0]])
        
    return answer

다른 사람 풀이

def strange_sort(strings, n):
    return sorted(strings, key=lambda x: x[n])

개선점

  • 정렬 함수를 제대로 알고있다면 고민을 많이 하지 않았을텐데!!🙄
  • sort, sorted 매개변수
    : key, reverse
# reverse - 오름 차순 / 내림 차순
num_list=[12,21,44,21]
num_list.sort(reverse=True) -- 내림차순
num_list.sort(reverse=False) -- 오름차순
# key - key값 기준으로 정렬 (lambda를 많이 사용)
str_list=['hi','home','happy']
sorted(str_list, key=len)
sorted(str_list, key=lambda x:x[1])
#튜플로 사용할 수 있음
tuple_list=[('hi',0),('home',1),('happy',2)]
tuple_list.sort(key=lambda x:(x[0],x[1]))
profile
FE Programmer

0개의 댓글