nueijeel

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

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

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

nueijeel 2023. 3. 3. 17:53

📌 문제 설명

 

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

 

 

📌 작성한 코드

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

람다식으로 깔끔하게 정리된 코드가 나왔다!!

학교에서 처음 코테 수업 들을때 람다식만 나오면 어질어질해졌는데..

시험대비로 한번 쫙 공부해뒀던게 이렇게 쓸모가 있다니(역시 세상에 쓸모없는 경험은 없다...)

 

sorted() 함수에 정렬할 리스트를 매개변수로 넣고, key 옵션에 lambda함수로 정렬 기준을 정해주는 방식이다.

 

일단 lambda x : x[n] 는 x[n] 요소를 기준으로 정렬한다는 뜻인데, 여기서 x는 strings의 각 요소로 치환되기 때문에 strings 배열 각 요소에서 n번째 인덱스 값을 기준으로 삼게 된다.

 

작성된 코드에서는  lambda x : (x[n], x) 로 lambda 표현식을 소괄호로 묶어 여러 기준을 나열했는데, 이렇게 하면 나열된 기준에 차례대로 우선순위가 부여된다. 이 문제의 제한조건 중 하나가 '인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.'였기 때문에 문제에서 제시한 정렬 조건을 만족한 뒤, 제한조건에 부합하는 새로운 정렬 조건을 덧붙여 준 것이다.

 

 

#ex
#문제 조건 만족 후, 제한 조건이 
#오름차순일 때
li = sorted(strings, key = lambda x : (x[n],x))

#내림차순일 때
rev_li = sorted(strings, key = lambda x : (x[n],-x))

 

만약 현재와 반대되는 차순으로 정렬하려면 조건에 -를 붙이면 된다.

 

 

 

암튼 람다식 활용한 정렬을 간략히 설명해보느라 내용이 좀 길어졌는데 나중에 람다식 활용도 따로 정리해봐야겠다!

728x90