본문 바로가기

프로그래밍 공부/프로그래머스 코딩테스트

[프로그래머스] 자바스크립트 LV1 문자열 내 마음대로 정렬하기

문자열 내 마음대로 정렬하기
문제 설명

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

제한 조건
  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

더보기
1
2
3
4
5
6
7
8
9
10
11
12
function solution(strings, n) {
    strings.sort(function (a, b){
        let first = a[n];
        let end = b[n];
        if(first === end){
            return (a > b) - (a < b);
        }else{
            return (first > end) - (first < end);
        }
    })
    return strings;
}
cs

function solution에 매개변수로 받은 strings는 문자열로 이루어진 배열이다. 먼저 배열을 정렬하기 위해서는 sort() 메서드를 이용해야한다. sort() 메서드의 내부 함수의 매개변수가 a와 b일 경우 리턴값으로 return (a > b) - (a < b);를 사용하게 되면 일반적인 sort() 메서드 처럼 작동한다. 

앞에 숫자가 크면 1을, 뒤에 숫자가 크면 -1을 반환한다.

비교 함수는 배열 안에 인접한 요소를 비교한다. 인수를 두 개 받고 첫 번째 인수는 인접한 왼쪽 요소, 두 번째 인수는 인접한 오른쪽 요소이다. sort() 메서드 내부 함수의 매개변수가 a와 b 일때 아래와 같은 규칙을 따른다.

①sort(function(a, b){}) < 0 이면 a를 b보다 작은 인덱스로 정렬한다.
②sort(function(a, b){}) == 0 이면 a와 b의 인덱스 순서를 바꾸지 않는다.
③sort(function(a, b){}) > 0 이면 b를 a보다 작은 인덱스로 정렬한다.

주의할 점은 n번째 문자가 같을 경우가 있는데,  이때는 return (a > b) - (a < b);를 이용해 매개변수로 받은 a와 b 문자열 전체를 비교하면 해결이 된다.