문자열로 구성된 리스트 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]))