https://programmers.co.kr/learn/courses/30/lessons/12915
프로그래머스에서 문자열 정렬을 하는 문제를 풀었다.
n번째 글자를 기준으로 문자열을 정렬하는 문제로 n번째 글자가 같을 땐 사전 순서 대로 정렬을 해야하는 문제이다.
특정 문자열로 정렬을 어떻게 해야할지 몰라서 검색을 해 봤고 문자열 정렬 중 함수를 인자로 받는 key를 사용하여 원하는 대로 정렬을 할 수 있다는 것을 알게 되었다.
key를 사용하여 문자열 정렬을 할 땐 lambda식을 사용할 수도 있다는 것까지 알게 되었다.
lambda식은 {lambda 인자: 표현식}의 형식으로 사용할 수 있다.
첫번째 시도 - 2개 케이스 중 1개 오답
def solution(strings, n):
return sorted(strings, key= lambda strings : strings[n])
그래서 이렇게 n번째 문자로 정렬을 하도록 key를 사용하여 풀었다.
하지만 이렇게 정렬을 하면 n번째 문자가 같을 때 사전 순서대로 정렬을 하는 것이 아니라 리스트 원소 순서대로 정렬이 되어서 두번째 케이스는 오답이 나왔다.
좀 더 찾아보니 lambda식에서 {lambda 인자: (정렬 기준1, 정렬 기준2)} 형식으로 사용하여 해결할 수 있었다.
두번째 시도 - 정답
def solution(strings, n):
return sorted(strings, key= lambda strings : (strings[n], strings))
원소 자체인 strings을 입력하면 사전 순서대로 정렬을 한다는 의미이다.
때문에 strings[n]로 정렬 후 이 문자가 같을 땐 strings 즉, 사전 순서대로 정렬한다는 의미인
key= lambda strings : (strings[n], strings)로 수정하였더니 오답없이 통과할 수 있었다.
key에 lambda 식을 사용하여 정렬하는 방법을 잘 기억해 둔다면 앞으로 비슷한 경우에도 정말 깔끔하고 짧게 코드를 작성할 수 있을 것 같다.
오늘도 새로운 방법을 배웠다!