프로그래머스 문자열 내 마음대로 정렬하기

박상록(Sangrok Park)·2020년 12월 21일
0

알고리즘(Algorithm)

목록 보기
4/4
post-thumbnail

프로그래머스 문자열 내 마음대로 정렬하기 LV1

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/12915

내 문제 풀이

function solution(strings, n) {

    for(let i = 0; i < strings.length; i++) {
        strings[i] = strings[i][n] + strings[i];
    }

    strings.sort();

    for(let j = 0; j < strings.length; j++) {
        strings[j] = strings[j].substring(1);
    }

   return strings;
}

각 문자열의 특정 인덱스를 기준으로 정렬을 해줘야 했기에 이렇게 썼다.

실행 시간

다른 사람의 문제 풀이 (1)

function solution(strings, n) {
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}

일단 되게 짧다.

실행 시간

생각보다 실행 시간이 길다.

아마도 sort()를 하면서 String.prototype.localeCompare()를 같이 써서 그런 것 같다. 그래도 덕분에 localeCompare 사용법을 알아서 좋다.

다른 사람의 문제 풀이 (2)

function solution(strings, n) {
    return strings.sort((a, b) => {
        const chr1 = a.charAt(n);
        const chr2 = b.charAt(n);

        if (chr1 == chr2) {
            return (a > b) - (a < b);
        } else {
            return (chr1 > chr2) - (chr1 < chr2);
        }
    })
}

Boolean값을 빼서 1 혹은 -1을 도출해 내는 것에서 좀 놀라웠다.

실행 시간

이 로직도 굉장히 빠른 것 같다. 하지만 내가 썼던 로직이 아주 미세하게 0.01~ 0.02ms정도 더 빠른 테스트케이스들이 있다(이게 무슨 의미가 있겠냐마는...)

배운 점

역시 다른 사람들의 풀이를 봐야된다는 생각을 하게 됐다. 실행시간을 떠나서, 일단은 많이 배우는 것 같다. Boolean값끼리 연산으로 1, -1도출할 수 있는 것도 그렇고, localeCompare의 사용법도 알게 되었다. 또, 많은 자바스크립트 내 메소드들이 있지만, 역시나 속도 자체에서는 기본 for loop를 여러번 나누어서 사용하는 것이 실행속도가 또 빨리 나오는 것을 봤다. 문제 해결을 위해서는 써야겠지만, 속도만을 놓고보면 자바스크립트 기본 메소드들을 많이 쓴다는 것이 꼭 능사가 아니라는 것을 알았다.

profile
한 줌의 소금과 같이 되고 싶은 개발자

0개의 댓글