NIRVANA

[level 1] 문자열 내 마음대로 정렬하기 본문

Coding test(Python3)/Programmers

[level 1] 문자열 내 마음대로 정렬하기

녜잉 2023. 7. 29. 18:46

문제 

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

 

문제 풀이 접근법1

key = lambda를 사용하여서 sort 기준을 정해주었다. 

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

샘플 테스트 케이스는 통과했지만 당연히 테스트 케이스는 통과하지 못했다.

왜냐면...이건 본질적으로는 "문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다."라는 조건을 충족시키지 못하니까...

 

문제 풀이 접근법2

sorted를 사용하여 n번째 문자를 기준으로 정렬한 뒤, 다시 sort()를 사용하여 사전순을 정렬해주었다. 

두번째 샘플 케이스는 성공했지만 다시 사전순으로 정렬되면서 첫번째 샘플 케이스는 통과하지 못했다. 

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

왜냐하면 마지막에 다시 사전순 정렬을 해주어서 앞에서 했던 n번째 문자로의 정렬이 사실상 무효화 되었기 때문이었다. 

(두번째 샘플 케이스의 경우 두 단어의 0, 1, 2번째 문자가 같아서 괜찮았던 것!)

 

 

문제 풀이 접근법3(성공!)

 sort()를 사용하여 먼저 문자를 사전순으로 정렬한 뒤, 다시 n번째 순으로 정렬해주었다. 

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

 

 


key = lambda를 사용하지 않고 for문으로도 함 풀어보고 싶긴하다..^~^