나 개발자 할래요
[JS] 문자열 내 마음대로 정렬하기 본문
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 |