Link
초보 개발자의 성장 일기
문자열 내 마음대로 정렬하기, n번째 문자로 정렬 본문
문제 설명
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
나의 해결 방법
map함수로 n번째를 뽑아 정렬을 하면 된다고 생각했다. ⇒ 오류
→ word[n]은 문자열에서 인덱스 n에 해당하는 문자 하나를 의미하므로, sort를 사용할 수 없다.
function solution(strings, n) {
return strings.map(word => word[n].sort(a, b) => a-b);
}
다른 해결 방법
function solution(strings, n) {
return strings.sort((a, b) => { // sort를 사용하고,
const charA = a[n]; // a와 b의 n번째 단어를 변수로 만든다.
const charB = b[n];
if (charA < charB) { // B가 클경우 -1을 반환하고 A가 클 경우 1을 반환한다.
return -1;
} else if (charA > charB) {
return 1;
} else { // 같을 경우 문자 전체를 비교해 정렬한다.
return a.localeCompare(b);
}
});
}
sort()를 사용하고 안에 다양한 조건을 넣을 수 있다는건 생각도 못했다. n번째 문자를 변수로 각각 만들어 클경우, 작을 경우 각각 -1, 1로 정렬을 해주고 같은경우 두 개의 문자 자체를 비교할 수 있게 만들었다.
function solution(strings, n) {
return strings.sort((s1, s2) =>
s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
sort(), localeCompare()를 사용하여 더 간편하게 만든 풀이이다. 먼저 sort()로 정렬 후 삼항연산자를 사용해서 n번째 값이 같으면 localeCompare를 써서 비교하고, 다를경우 n번째와 비교한다.
localeCompare()
참조 문자열이 정렬 순으로 지정된 문자열 앞 혹은 뒤에 오는지 또는 동일한 문자열인지 나타내는 수치를 반환한다.
referenceStr.localeCompare(compareString);
- compareString 전에 referenceStr이 오면 음수
- compareString 뒤에 referenceStr이 오면 양수
- 동등한 경우 0 을 반환
→ 문자 비교할 때 사용하면 좋을것 같다.
사용 예시
// "a"는 "c" 전에 위치하므로 음수 값을 반환
"a".localeCompare("c"); // -1
'Development > Algorithm' 카테고리의 다른 글
[node.js] 백준 1920번 수 찾기 (0) | 2024.02.16 |
---|---|
[node.js] 백준 9012번 괄호 (0) | 2024.02.14 |
문자열 다루기 기본 (0) | 2023.11.25 |
약수의 개수와 덧셈 (0) | 2023.11.24 |
가까운 수, 배열에서 가장 가까운 수 찾기 (0) | 2023.11.22 |