[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