[Programmers] 12915 문자열 내 마음대로 정렬하기

[Programmers] 12915 문자열 내 마음대로 정렬하기

문제 링크

이 문제는 sort() 또는 sorted()와 같은 함수로 풀이할 수 있겠다고 생각이 들었고, 진행했지만 다음 조건을 만족시키지 못했다.

인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

동일한 문자의 경우 그 다음 우선 순위인 전체 문자열을 가지고 정렬을 해야하는데, 방법을 찾지 못하다가 정렬함수에 대해서 좀 더 공부하고 해결할 수 있었다.

sort()sorted()는 키 함수를 인자를 받을 수 있는데 key 함수에 작성된 기준을 토대로 정렬을 수행한다. 다음과 같이 작성할 수 있다.

def getKey(student):
  return student[1]

students = [("Mike", 11), ("Bryan", 12), ("Jerry", 9)]
students.sort(key = getKey)
print(students) # [ ("Jerry", 9), ("Mike", 11), ("Bryan", 12)]

getKey 함수가 key가 되는데, students의 요소들이 key함수의 인자로 전달되고 key 함수는 정렬 기준이 될 key 값을 반환한다. 위에서는 요소의 인덱스 1이 key가 되어 정렬된다.

즉 students의 나이를 기준으로 정렬된다.

이런 식으로 sort함수를 쓰면서 원하는대로 조건을 작성할 수 있다.

위와 동일하게 동작하는 코드를 lambda함수를 써서 작성할 수 있다.

students = [("Mike", 11), ("Bryan", 12), ("Jerry", 9)]
students.sort(key = lambda x : x[1])
print(students) # [ ("Jerry", 9), ("Mike", 11), ("Bryan", 12)]

이 개념을 습득하고나서 다음과 같이 풀이할 수 있었다. key가 되는 값을 순서쌍(x[n], x)으로 묶어서, x[n]을 비교하고 같은 값일 때는 다음 항인 x를 비교할 수 있도록 작성해줬다.

나의 풀이

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

© 2021. All rights reserved.