Stay Hungry Stay Foolish

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

[Programmers] L1. 문자열 내 마음대로 정렬하기 (Python)

dev스카이 2024. 11. 6. 15:06

[문제 링크] 👇

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


풀이

💡 sorted() 와 lambda 사용

  • sorted와 lambda 를 조합해서 사용한다.
  • strings 리스트의 요소들을 다음 기준에 따라 정렬
    • 기본 정렬 기준 : 각 문자열의 n번째 글자를 기준으로 오름차순 정렬
    • 보조 정렬 기준 : 만약 n번째 글자가 같은 문자열이 있다면, 전체 문자열을 기준으로 사전순 정렬

 

lambda

  • n 번째 인덱스 기준으로 정렬하고, 동일한 글자인 경우 문자열 기준으로 추가 정렬
key=lambda x: (x[n], x)

 

sorted()

  • strings 오름차순 정렬
sorted(strings)

 

 

Solution

sol.1

def solution(strings, n):
    # 첫 번째로 n번째 문자 기준으로 정렬하고, 두 번째로 전체 문자열 기준으로 정렬
    answer = sorted(strings, key=lambda x: (x[n], x))
    return answer

 

1️⃣ key=lambda x: (x[n], x)

  • 각 문자열에 대해 (x[n], x) 형태의 튜플을 생성한다.
  • 예를 들어, n = 1이고 strings = ["sun", "bed", "car"] 라면,
    • "sun"의 key는 ("u", "sun"), "bed"의 key는 ("e", "bed"), "car"의 key는 ("a", "car")

2️⃣ sorted는 리스트를 key 값을 기준으로 정렬한다.

  • 먼저 n번째 문자인 첫 번째 요소 (x[n], x)의 첫 번째 항목을 기준으로 비교하여 오름차순으로 정렬한다.
  • 예시에서 ("u", "sun"), ("e", "bed"), ("a", "car")를 n=1 기준으로 정렬하면 "car", "bed", "sun" 순서로 나열된다.

3️⃣ 보조 정렬

  • 만약 첫 번째 요소가 동일하면, x 전체 문자열(두 번째 요소)을 기준으로 사전순 정렬된다.
  • 예를 들어 strings = ["ace", "acd", "acf"]에서 n=1이면,
    • ("c", "ace"), ("c", "acd"), ("c", "acf")가 되어 사전순 정렬로 "ace", "acd", "acf"가 된다.

 

sol.2

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

 

위 방식은 리스트 strings를 두 단계에 걸쳐 정렬한다. 여기서는 문자열의 n번째 글자 기준으로 오름차순 정렬하되, 동일한 n번째 글자가 있는 경우, 사전순으로 정렬하는 방식이다. 이 과정에서 내부 sorted() 함수가 먼저 실행되고, 그 결과를 외부 sorted() 함수가 다시 정렬한다.

 

1️⃣ 첫 번째 sorted(strings) 실행

  • 이 단계에서는 strings 리스트의 원소들을 전체 문자열 기준으로 사전순 정렬
  • 예를 들어, strings = ["sun", "bed", "car"]이면 첫 번째 sorted(strings)는 ["bed", "car", "sun"]로 정렬

2️⃣ 두 번째 sorted(..., key=lambda x: x[n]) 실행

  • 여기서 첫 번째 sorted(strings) 결과인 ["bed", "car", "sun"]이 입력된다.
  • 이제 key=lambda x: x[n]에 의해 각 문자열의 n번째 글자를 기준으로 정렬
  • 예를 들어, n=1이면
    • "bed"의 n번째 글자는 "e",
    • "car"의 n번째 글자는 "a",
    • "sun"의 n번째 글자는 "u"

3️⃣ ("e", "a", "u") 순서대로 "car", "bed", "sun"으로 정렬