프로그래머스 | 문자열 내 마음대로 정렬하기 | Javascript Array.sort()

고광필·2022년 2월 10일
0

알고리즘

목록 보기
5/12
post-thumbnail

https://programmers.co.kr/learn/courses/30/lessons/12915?language=javascript

문제

문자열이 담긴 배열과, index가 주어질때
배열 속 문자열의 index번째 글자로 정렬하는 문제입니다.
단, index번째 글자가 같을 경우 해당 문자열의 사전순으로 정렬해야 합니다.

코드

function solution(strings, n) {
  return strings.sort().sort((a, b) => (a[n] >= b[n] ? 1 : -1));
}

풀이

지난 Array.sort() 공부 포스팅으로 정렬에 대해 안다고 생각했지만, 글자가 같을때 추가조건으로 정렬하는 부분이 어려웠습니다.

위 문제는
1. index 번째 글자를 기준으로 오름차순 정렬
2. index 번째 글자가 같으면, 해당 문자열들 중 사전순으로 정렬 (오름차순)이 조건입니다.

따라서 먼저 전체 문자열을 사전순으로 정렬하고
string.sort()

그 다음 index번째 글자를 비교합니다.
단, a[n] > b[n] 의 반환값이 1이 아니라 a[n] >= b[n]의 반환값을 1로 하여
index번째 글자가 같으면 기존의 오름차순 순서를 가지게 합니다.

참고

위 사진은 순서대로
4 오름차순 정렬,
5 오름차순 정렬 후, n번째문자를 가지고 오름차순 정렬 (같으면 기존의 오름차순 유지),
6 n번째 문자를 기준으로 오름차순 (n번째 문자가 같으면 앞으로),
7 n번째 문자를 기준으로 오름차순 (n번째 문자가 같으면 뒤로),
정렬한 결과입니다.

sort는 지난 Javascript Sort 글에서 알 수 있듯이 a > b일때 반환값이 1이면 앞의 element를 우선순위로 인식합니다.

6번째줄은 a[n] >= b[n]이므로 n번째 문자열이 같을때도 반환값이 1이라서 abce가 abcd보다 앞에 옵니다.

7번째 줄은 a[n] > b[n]이므로 n번째 문자열이 같을때 반환값이 -1이라서 abce가 abcd보다 뒤에 옵니다.

정리

Array.sort()를 지난번에 공부한 후, 좀 더 복잡하게 사용하게 되어
어떻게 정렬을 효과적으로 사용할 수 있을지 알게 되었습니다.

profile
이해하는 개발자를 희망하는 고광필입니다.

0개의 댓글