2. 튜플의 조건에 맞춰 쪼개진 문자열을 길이에 맞게 정렬합니다.
이 부분을 특히 조심해야 하는데, 튜플은 원소 순서도 하나의 구성 요소이므로 순서가 틀리면 정답도 틀립니다. 대신 주어진 튜플들의 순서 자체는 튜플 구성에 영향을 주지 않으므로, n-튜플의 사전적 정의 형태로 튜플의 개수를 기준으로 오름차순 정렬을 하면 가장 첫 번째 원소를 알아낼 수 있습니다.
data = sorted(data, key=lambda x: len(x))
정렬했으므로 O(nlogn) 이상의 비용은 피할 수 없지만 정렬할 데이터가 많아도 몇만 개 정도(문자열의 최대 길이는 백만, 제출해야 할 튜플의 최대 길이는 500입니다)이므로 예상되는 문제는 없을 것입니다.
NOTE
람다 함수
람다(lambda) 함수는 기존의 함수를 사용할 때 불편한 점들을 해소하기 위해 만들어진 익명 함수입니다(그렇다고 기존 함수를 완전히 대체하지는 않습니다). 특정 기능을 미리 선언하고 필요한 곳에서 사용하는 것이 아니라, 프로그램이 실행될 때 선언한 곳에서 즉각적으로 생성되고 해당 부분을 벗어나면 변수로 담아두지 않는 이상 다른 곳에서 해당 함수를 호출할 수 없기에 쓰기 간편한 일회용 함수 형태로 많이 사용합니다. filter(), map(), reduce()와 같이 동작하기 위해 식을 함수로 표현해야 하는 상황에서 요긴하게 사용할 수 있습니다. 사용법은 다음과 같습니다.
lambda <표현식>: <표현식을 이용한 연산>
튜플의 순서는 항상 고정되어 있으므로 집합의 원소 위치가 달라질 수는 있어도 구성 자체는 달라질 수 없습니다. {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, … {a1, a2, a3, a4, …, an}} 순서임을 기억합시다.