[프로그래머스] [3차] 파일명 정렬 (JS)

hhkim·2023년 9월 27일
0

Algorithm - JavaScript

목록 보기
143/188
post-thumbnail

풀이 과정

  1. 파일 배열에 대해 반복
  2. 문자열을 세 부분으로 쪼개기
    숫자가 나올 때까지 head: Number()NaN이거나 공백일 동안
    다시 문자가 나올 때까지 number
    나머지 tail
  3. 문자열 비교: sort()
    head는 소문자로 치환
    number는 숫자로 치환
    모두 같으면 순서를 바꾸지 않음

코드

function solution(files) {
  const arr = files.map((file) => {
    let i = 0;
    while (isNaN(file[i]) || file[i] === ' ') ++i;
    const head = file.slice(0, i);
    let j = i;
    while (!isNaN(file[j])) ++j;
    const number = file.slice(i, j);
    const tail = file.slice(j);
    return [head, number, tail];
  });

  arr.sort((a, b) => {
    const [ah, bh] = [a[0].toLowerCase(), b[0].toLowerCase()];
    const [an, bn] = [Number(a[1]), Number(b[1])];
    if (ah === bh && an === bn) return 0;
    if (ah < bh) return -1;
    if (ah === bh && an < bn) return -1;
    return 1;
  });
  return arr.map((a) => a.join(''));
}

🦾

isNaN(' ')false
=> 0으로 취급되기 때문

0개의 댓글