Algorithm

[프로그래머스] Level1 | 문자열 내 맘대로 정렬하기 - 파이썬(Python) | 연습문제

토오오끼 2021. 11. 12. 16:04
728x90
반응형

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

 

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

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

programmers.co.kr

프로그래머스에서 문자열 정렬을 하는 문제를 풀었다.

 

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 식을 사용하여 정렬하는 방법을 잘 기억해 둔다면 앞으로 비슷한 경우에도 정말 깔끔하고 짧게 코드를 작성할 수 있을 것 같다.

오늘도 새로운 방법을 배웠다!

 


해당 문제 풀이 코드

 

GitHub - YOOHYOJEONG/algorithm_practice: 알고리즘 공부 및 코딩테스트 준비

알고리즘 공부 및 코딩테스트 준비. Contribute to YOOHYOJEONG/algorithm_practice development by creating an account on GitHub.

github.com

 

728x90
반응형