문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
strings는 길이 1 이상, 50이하인 배열입니다.
strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
모든 strings의 원소의 길이는 n보다 큽니다.
인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
function Solution(strings, n)
{
let answer = [];
for(let i = 0; i<strings.length; i++)
{
strings[i] = strings[i][n] + strings[i];
}
strings.sort();
for(let i = 0; i<strings.length; i++)
{
answer.push(strings[i].replace(strings[i][0], ""));
}
return answer;
}
코드 작성 후, for 문의 두번 사용이 문제에 비해 연산을 너무 잡아먹는다고 생각해 다른 사람들의 풀이를 찾아보던 중 좋은 코드가 있어 같이 첨부한다.
function Solution(strings, n)
{
return strings.sort((s1, s2) => s1[n] === s2[n] ?
s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
해석한 바는 다음과 같다.
1. Sort() 를 통해 정렬 후 return 하는데, 화살표 함수를 통해 정해진 기준으로 비교 후 정렬
2. 두 인자(s1, s2) 를 놓고 차례대로 비교, s1[n] 과 s2[n] 을 비교해 같은지 여부 판단을 먼저 한다
2-1. 같은 경우, 문제에 따라 사전순대로 정렬하기 위해 s1 과 s2 를 비교 : localeCompare()
2-2. 다른 경우, s1[n] 과 s2[n] 만 추출 후 비교
이 2-2의 문자열이 다른 경우 n, 즉 정한 순번의 문자값에 따라서 정렬되는 과정이다.
#8. 실행 컨텍스트 (3) | 2024.11.07 |
---|---|
#7. 데이터 타입 심화 (6) | 2024.11.06 |
#5. 일급 객체, Map (4) | 2024.11.05 |
#4. ES6 - JavaScript Version (0) | 2024.11.05 |
#3. 자바스크립트의 기초_1주차 숙제 (0) | 2024.11.04 |