본문 바로가기
알고리즘/프로그래머스

[python] 문자열 내 마음대로 정렬하기(연습문제)

by 민-Zero 2020. 3. 22.

문제는 위와 같다. 목표는 입력받은 문자열을 원소로 가지는 배열 strings를 입력받은 인덱스 번호 n번째 문자를 기준으로 오름차순 정렬한 배열을 반환한다. 주의할 점은 만약 기준 문자가 같을 경우 해당 문자는 사전순으로 배열해야 한다.

strings가 [sun, bed, car]이고 n이 1이라면 인덱스 번호 1인 문자 u, e, a를 기준으로 오름차순 정렬하므로 a, e, u 순서가 되므로 반환되는 배열은 [car, bed, sun]이 된다.

strings가 [abc, abe, abd]이고 n이 1이라면 기준이 되는 문자들이 b로 모두 같다 따라서 이때 기준 문자가 같은 문자열들은 사전순으로 정렬해야 하므로 abc, abd, abe 가된다.

 

설계 및 구현

구현을 위해 주어진 함수는 정렬할 배열 strings와 인덱스 번호를 나타내는 n을 매개변수로 가진다. 해당 함수의 구현은 문제 자체에 힌트가 있다. strings배열을 오름차순으로 정렬하여 반환하는데 정렬 기준이 n번째 인덱스이다.

즉, 오름차순 정렬을 어떤 기준을 가지고 수행하면 되므로 sorted(arr, key) 함수를 사용하면 된다. 해당 함수에는 key 매개변수가 존재하여 정렬을 수행할 때 어떤 기준으로 정렬할지 설정할 수 있도록 제공해준다. 특징은 key 매개변수는 함수여야 하고, 하나의 입력값과 반환값을 가진다. key 매개변수로 전달된 함수는 입력 레코드마다 한 번씩 호출된다.

① sorted() 함수의 key매개변수를 사용하여 정렬 기준 설정

② 기준이 되는 문자가 중복일 경우 대비

 

sorted() 함수에 key 매개변수를 사용하여 오름차순 정렬을 수행하면 위와 같다. 정렬을 수행할 배열은 strings를 전달하고 key 매개변수는 함수를 전달해야 하기 때문에 익명 함수 lambda를 사용하여 기준을 결정한다. 

기준 문자가 중복일 경우 중복이 되는 문자열끼리는 사전순으로 정렬해야 하기 때문에 n번째 인덱스에 해당하는 문자를 문자열의 맨 앞에 붙여 정렬을 하게 되면 기존의 정렬처럼 맨 앞의 문자부터 순서대로 정렬되고 기준이 동일한 문자열들은 사전순으로 정렬된다. 

쉽게 말해 [abb, aba], n=1이라면 [babb, baba]로 정렬하기 때문에 n번째 인덱스가 동일할 경우 자동적으로 [baba, babb] 녹색 부분이 비교되므로 사전순으로 정렬된다.

예제를 이용하여 확인한 결과 정상적으로 값이 출력되어 채점을 수행했다.

정상적으로 통과할 수 있었다.

댓글