Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

나 개발자 할래요

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

개발자 되는 법.../코딩테스트...

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

개발_자 2024. 7. 11. 14:59

 

function solution(strings, n) {
    var answer = strings.sort((a, b) => {
        // 특정 인덱스 n의 문자를 기준으로 비교
        if(a[n] > b[n]) return 1; // a의 n번째 문자가 b의 n번째 문자보다 크다면 1 반환 (a가 b 뒤로 간다)
        else if(a[n] < b[n]) return -1; // a의 n번째 문자가 b의 n번째 문자보다 작다면 -1 반환 (a가 b 앞으로 간다)
        else return a > b ? 1 : -1; // n번째 문자가 같다면 전체 문자열을 기준으로 비교하여 정렬
    });
    
    return answer; // 정렬된 배열 반환
}

 

`stirngs.sort(...)`

`sort`메소드는 배열을 정렬하는 자바스크립트 내장 함수

여기에 비교 함수를 인수로 전달

 

비교 함수 `(a, b) => {...}`

배열의 요소를 두 개씩 비교하여 정렬 순서를 결정

 

`if(a[n] > b[n]) return 1;`

문자열 `a`의 `n`번째 문자가 문자열 `b`의 `n`번째 문자보다 큰 경우,

`a`가 `b` 뒤에 오도록

 

`if(a[n] > b[n]) return -1;`

문자열 `a`의 `n`번째 문자가 문자열 `b`의 `n`번째 문자보다 작은 경우,

`a`가 `b` 앞에 오도록

 

`else return a > b ? 1 : -1;`

`a`와 `b`의 `n`번째 문자가 같은 경우,

전체 문자열의 기준으로 비교

`a`가 `b`보다 사전순으로 뒤에 있으면 1을 반환하여 `a`가 `b` 뒤에 오도록,

그렇지 않으면 -1을 반환하여 `a`가 `b` 앞에 오도록

 

오름차순: 작은 값에서 큰 값으로 정렬 (return 1과 return -1의 순서를 유지)

내림차순: 큰 값에서 작은 값으로 정렬 (return 1과 return -1의 순서를 반대로)

 

 

 

 


 

 

 

다른 사람 풀이

function solution(strings, n) {
    // strings 배열
    // n 번째 문자열 비교
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}

 

 

 

`.localeCompare()`

두 문자열을 비교하여 그 순서를 결정하는 데 사용되는 메서드

언어별 정렬 규칙을 따를 수 있음.

 

기본적으로 문자열을 사전순으로 비교하지만,

선택적으로 로케일과 비교 옵션을 지정할 수 있음

 

str1.localeCompare(str2, [locales, [options]])

 

매개변수

 

 str1 : 비교할 첫 번째 문자열

 str2 : 비교할 두 번째 문자열

locales (선택 사항) : 사용할 로케일 문자열 또는 로케일 배열

예를 들어, "en"은 영어, "fr"은 프랑스어를 의미

options (선택 사항) : 비교 옵션을 지정하는 객체

예를 들어, sensitivity, ignorePunctuation, numeric 등

 

반환 값

 

 `-1` : `str1`이 `str2`보다 앞에 옴

 `0` :  `str1`과 `str2`가 동일

`1` :  `str1`이 `str2`보다 뒤에 옴

 

function solution(strings, n) {
    // strings 배열을 정렬합니다.
    // s1과 s2는 배열의 요소(문자열)입니다.
    return strings.sort((s1, s2) => 
        // s1[n]과 s2[n]이 같으면 전체 문자열을 비교하고,
        // 그렇지 않으면 s1[n]과 s2[n]을 비교합니다.
        s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n])
    );
}

 

 

 

`s1[n] === s2[n]`

`s1`과 `s2`의 `n`번째 문자가 같으면, `s1.localeCopare(s2)`반환

문자열을 사전순으로 비교

 

`s1[n] !== s2[n]`

`s1`과 `s2`의 `n`번째 문자가 다르면, `s1[n].localeCopare(s2[n])`반환

`n`번째 문자를 사전순으로 비교

 

'개발자 되는 법... > 코딩테스트...' 카테고리의 다른 글

[JS] 두 개 뽑아서 더하기  (0) 2024.07.15
[JS] K번째수  (0) 2024.07.12
[JS] 숫자 문자열과 영단어  (0) 2024.07.10
[JS] 시저 암호  (0) 2024.07.10
[JS]최소직사각형  (0) 2024.07.08