프로그래머스

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

SS_G 2023. 6. 9. 01:09
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

안녕하세요, 오늘은 프로그래머스의 '문자열 내 마음대로 정렬하기' 문제를 함께 풀어보려 합니다. Python을 이용해 풀어볼 텐데요, 이 문제는 문자열 정렬과 람다(lambda) 함수 사용법에 대해 깊이 이해할 수 있는 좋은 문제입니다.

 

문제 설명

이 문제는 주어진 리스트(strings)의 문자열들을 주어진 인덱스(n)에 위치한 문자를 기준으로 정렬하되, 그 문자가 같을 경우 문자열 전체를 비교하여 정렬하는 문제입니다.

 

문제 풀이

Python에서 제공하는 내장 함수인 sorted를 이용하여 풀 수 있습니다.

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

sorted 함수는 기본적으로 오름차순으로 정렬해줍니다. 그런데 여기서는 n번째 문자를 기준으로 정렬하고, n번째 문자가 같을 경우에는 문자열 전체를 비교하여 사전순 정렬해야 합니다. 이런 복잡한 정렬 기준은 어떻게 적용할까요?

그래서 사용하는 것이 람다 함수입니다. 람다 함수는 이름 없이 사용할 수 있는 익명 함수입니다. sorted 함수의 key 인자에 람다 함수를 사용하여 정렬 기준을 정의할 수 있습니다.

 

lambda x: (x[n], x)

위의 람다 함수는 x[n]를 우선적으로 비교하고, 그 값이 같으면 x를 비교하도록 만들어줍니다. 이렇게 람다 함수를 이용하면 정렬 조건을 유연하게 적용할 수 있습니다.

 

lambda x: (x[n])

위 처럼 코드를 작성한다면, 코드 자체는 잘 동작 합니다. 하지만 이 코드는 문자열 'n'번째 문자를 기준으로만 정렬하게 됩니다.

이렇게 하면 n번째 문자가 같은 두 문자열의 순서는 원래 리스트(strings)의 순서에 의해 결정되는데, 이는 "문자열 전체를 사전 순으로 정렬"하는 문제의 요구사항을 만족시키지 못하게 됩니다.

 

예를 들어, strings = ['car', 'cat', 'bar', 'bat']이고 n = 1일 때, sorted(strings, key=lambda x: x[n])는 ['car', 'cat', 'bar', 'bat']를 반환하게 됩니다. 왜냐하면 n번째 문자('a')가 같은 'car'와 'cat'은 원래의 순서대로 유지되기 때문입니다.

반면에 sorted(strings, key=lambda x: (x[n], x))는 ['bar', 'bat', 'car', 'cat']를 반환하게 됩니다. 'a'를 기준으로 먼저 정렬하고, 그 후에 전체 문자열을 비교하여 정렬하기 때문입니다.

마무리

'문자열 내 마음대로 정렬하기' 문제를 통해 sorted 함수와 람다 함수를 어떻게 사용하는지 알아보았습니다. Python의  내장 함수와 람다 함수를 잘 활용하면 복잡한 조건의 정렬 문제도 쉽게 해결할 수 있습니다.

다음에도 좋은 문제 풀이로 찾아뵙겠습니다. 감사합니다!

반응형