function solution(strings, n) {
var answer = strings.sort((a, b) => {
if(a[n] > b[n]) return 1
if(a[n] < b[n]) return -1
if(a[n] === b[n]){
if(a>b) return 1
if(a<b) return -1
return 0
}
})
return answer;
}
위의 문제를 처음 봤을 때 각 문자를 spilit 해서 그에따라 정렬하고 다시 join해야 한다고 생각했다. 하지만 sort()메소드를 잘 몰라서 그런 것이었다. 찾아보니 sort 메소드는 정렬가능한 종류가 엄청 많았고 그 중에는 string[n], string 둘 모두 가능했다. 그래서 이런 방식으로 풀게 되었다.
다른 분은 어떻게 풀었는지 궁금해서 보니 획기적으로 짧은 풀이법도 있었다.
localeCompare는 문자열을 비교하는 메소드이고, 비교결과에 따른 숫자를 반환한다.(양수, 0, 음수)
3항연산자를 활용해서 인덱스에 따른 비교가 같다면 문자열 자체를 비교해서 배열하고, 아니면 인덱스의 비교를 하는 방식이다. 역시 if문을 여러번 쓰는 것보단 삼항연산자 쪽이 짧게 축약할 수 있어 좋아보였다.
function solution(strings, n) {
// strings 배열
// n 번째 문자열 비교
return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
'내용 복습 > 알고리즘' 카테고리의 다른 글
프로그래머스 Lv.2 이진변환 반복 (0) | 2024.06.27 |
---|---|
프로그래머스 Lv.1 달리기 경주 JS (1) | 2024.06.08 |
[코드 없는] 알고리즘 1장 내용 정리 (1) | 2024.02.19 |
[JS] 프로그래머스- 최대공약수와 최소공배수 (0) | 2024.02.13 |
[JS] 프로그래머스 - 문자열 다루기 기본 (0) | 2024.02.07 |