본문 바로가기

취준/프로그래머스

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

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

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기 | 프로그래머스

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다. 제한 조건 strings는 길이 1 이상, 50이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100이하인

programmers.co.kr

 

이 문제는 파이썬에서 간단하게 풀 수 있다.

sorted(strings, key=lambda a:(a[n],a) ) 로 한줄로 정렬해서 뭔말인지 모를 수 있는데 그냥 분해해서 보면 간단하다.

  1. sorted(iterable) -> iterable Iterable한, list 같은 데이터를 정렬해서 반환한다.
    1. (obj.sort()는 반환 없이 obj 정렬, 조심하자. )
  2. key= 이 인자는 "어떤 조건으로 정렬할건지" 라는것을 받는다.
  3. lambda a: 람다, 익명함수 뭐 이런 함수형 언어 개념 조금인데, 함수 이름은 필요없고, iterable 에서 인자 하나를 a 라는 이름으로 받는다는 뜻이다.
    1. 더 궁금하면 찾아보자. 함수형 언어, 함수형 프로그래밍같은걸로 찾으면 나온다.
  4. (a[n],a) 첫번째는 a[n]을 오름차순으로, 첫번째 조건이 같으면 a를 오름차 순으로 정렬하라는 뜻이다.
    1. 변환할 인자가 하나면 괄호는 생략할 수 있다. lambda a : (a[n]) -> lambda a: a[n]

 

def solution(strings, n):
    return sorted(strings, key=lambda a: (a[n],a) )