Tesseractjh
한 걸음씩
Tesseractjh
전체 방문자
오늘
어제
  • 전체 (293)
    • IT (30)
      • JavaScript (7)
      • TypeScript (5)
      • React (5)
      • Next.js (3)
      • MongoDB (2)
      • Webpack (2)
      • HTML & CSS (1)
      • Git (0)
      • AWS (1)
      • 기타 (4)
    • 연습장 (259)
      • 백준(BOJ) 문제풀이 (185)
      • 프로그래머스 문제풀이 (61)
      • LeetCode 문제풀이 (2)
      • HackerRank 문제풀이 (7)
      • 낙서장 (3)
      • 기타 (1)
    • 프로젝트 (3)
      • 지뢰피하기 (1)
      • 키릴-라틴 문자 변환기 (1)
      • Flex & Grid (1)
    • 멋쟁이사자처럼 프론트엔드 스쿨 1기 (1)
      • 일기 & 회고록 (1)

인기 글

티스토리

hELLO · Designed By 정상우.
Tesseractjh

한 걸음씩

[프로그래머스 Level 2] 파일명 정렬 - JavaScript
연습장/프로그래머스 문제풀이

[프로그래머스 Level 2] 파일명 정렬 - JavaScript

2022. 6. 11. 00:02

🔗 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/17686

 

코딩테스트 연습 - [3차] 파일명 정렬

파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램

programmers.co.kr

✏️ 풀이

function solution(files) {
    return files.sort((a, b) => {
        const [, aHead, aNum] = a.match(/(\D+)(\d{1,5})(.*)/);
        const [, bHead, bNum] = b.match(/(\D+)(\d{1,5})(.*)/);
        const aLowerHead = aHead.toLowerCase();
        const bLowerHead = bHead.toLowerCase();
        if (aLowerHead === bLowerHead) {
            return Number(aNum) - Number(bNum);
        } else {
            if (aLowerHead > bLowerHead) {
                return 1;
            } else if (aLowerHead < bLowerHead) {
                return -1;
            } else {
                return 0;
            }
        }
    });
}

먼저 비교하고자 하는 두 파일명에서 HEAD와 NUMBER를 분리해내야 한다. String.prototype.match를 활용하여 HEAD, NUMBER, TAIL을 모두 분리할 수 있다. String.prototype.match의 결과값은 배열이며, 배열의 첫 번째 요소는 문자열 전체, 두 번째부터는 정규표현식에서 소괄호 안에 캡처된 결과가 순서대로 나온다.

 

예를 들어, 'foo010bar020.zip'.match(/(\D+)(\d{1,5})(.*)/)의 반환값은 ['foo010bar020.zip', 'foo', '010', 'bar020.zip', index: 0, input: 'foo010bar020.zip', group: undefined]이 된다. (index, input, group은 이 문제를 푸는 것과 관계가 없으니 넘어가겠다)

 

이렇게 구한 HEAD와 NUMBER로 sort 함수의 콜백함수를 완성하면 된다.

HEAD는 모두 소문자로 만들어 비교하도록 하고, NUMBER는 Number(NUMBER)의 값의 대소비교를 하면 된다.

저작자표시 비영리 (새창열림)

'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글

[프로그래머스 Level 2] k진수에서 소수 개수 구하기 - JavaScript  (0) 2022.06.13
[프로그래머스 Level 2] n진수 게임 - JavaScript  (0) 2022.06.11
[프로그래머스 Level 2] 압축 - JavaScript  (0) 2022.06.10
[프로그래머스 Level 2] 방금그곡 - JavaScript  (0) 2022.06.10
[프로그래머스 Level 3] 여행경로 - JavaScript  (0) 2022.06.10
    '연습장/프로그래머스 문제풀이' 카테고리의 다른 글
    • [프로그래머스 Level 2] k진수에서 소수 개수 구하기 - JavaScript
    • [프로그래머스 Level 2] n진수 게임 - JavaScript
    • [프로그래머스 Level 2] 압축 - JavaScript
    • [프로그래머스 Level 2] 방금그곡 - JavaScript
    Tesseractjh
    Tesseractjh
    바닐라 자바스크립트를 좋아하는 개발자입니다

    티스토리툴바