jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트 배열의 특수함
  • JavaScript
  • 자바스크립트 채팅방 스크롤
  • 자바스크립트 커링
  • fetch 취소하기
  • 백준 17406 nodeJS
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 25632 소수 부르기 게임
  • 리액트 프로젝트 디버깅하기
  • 계수정렬 자바스크립트
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • 퀵정렬 자바스크립트
  • 리코쳇 로봇 javascript
  • 대충만든자판 javascript
  • 자바스크립트 모듈 시스템
  • 깃 이전 커밋에서 새 브랜치 만들기
  • safari Date format NaN
  • 자바스크립트 이벤트 위임
  • javascript use strict
  • 외벽 점검 javascript
  • safari invalid date error
  • 덧칠하기 javascript
  • 프로그래머스 숫자카드나누기 javascript
  • 1753 최단경로 javascript
  • 병합정렬 자바스크립트
  • 억억단을 외우자 javascript
  • 자바스크립트 sort는 왜 그모양일까
  • 백준 자바스크립트 입력 템플릿
  • 가사 검색 자바스크립트
  • 13460 javascript nodejs

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae

Go devlog

[프로그래머스] 파일명 정렬 - 자바스크립트
DS & Algorithm/programmers

[프로그래머스] 파일명 정렬 - 자바스크립트

2021. 6. 24. 00:56

문제

 

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

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

programmers.co.kr

풀이

 

파일명이 다음과 같이 주어지며, Head, Number, Tail로 나뉜다.

 

조건을 나열해보면

1. Head를 기준으로 대소문자 구분을 하지 않고 사전순으로 정렬한다.
2. Head가 같다면 Number의 숫자 순으로 정렬한다. 0012와 12는 같은 값으로 처리되어야 한다.
3. Head, Number가 모두 같다면 원래 입력 순서를 유지한다.

이렇게 3가지이다.

 

입력으로 주어진 문자열에서 Head, Number를 발견하면 나머지는 Tail로 취급이 된다.

문자열은 영문 대소문자, 숫자, 공백, 마침표, 빼기부호만으로 이루어져있다.

 

Head, Number, Tail 각각에 대한 조건은 다음과 같다.

 

Head는 숫자가 아닌 문자로만 이루어지며 최소 한글자 이상이다.
Number는 1~5글자의 연속된 숫자이다.
Tail은 문자열에서 Head, Number를 제외한 나머지이다.

 

정규 표현식을 이용해 코드를 완성할 수 있겠다.

 

코드

function solution(files) {
  const pattern = /(\D+)(\d{1,5})/;
  return files.sort((a, b) => {
    let [aHead, aNumber] = a.match(pattern).slice(1, 3);
    let [bHead, bNumber] = b.match(pattern).slice(1, 3);
    aHead = aHead.toLowerCase();
    bHead = bHead.toLowerCase();
    if (aHead === bHead && aNumber === bNumber) return 0;
    if (aHead === bHead) return aNumber - bNumber;
    if (aHead > bHead) return 1;
    else return -1;
  });
}
코드 설명

pattern을 이용해 2가지 그룹을 찾는다.

 

첫번째 그룹은 \D+ (숫자가 아닌것을 1개 이상 찾는다.)
두번째 그룹은 \d{1,5} (숫자인 것을 1개 이상 5개 이하로 찾는다.)

 

발견한 Head, Number를 각각 변수로 지정하고 Head를 소문자로 바꿔준다.

 

 

Head, Number를 이용해 정렬하는 조건은 3가지이며, 차례대로 조건을 구현한다.

 

단, if문의 조건에 부합해 return문을 만나면 더이상 코드 실행을 하지 않는 것을 고려해준다.

 

이에 따라서 

Head, Number가 모두 같을때 => Head가 같을 때 => Head를 사전순으로 나열할 때의 순서로 조건을 작성해야 한다.

저작자표시 (새창열림)

'DS & Algorithm > programmers' 카테고리의 다른 글

[프로그래머스] 압축 - 자바스크립트  (0) 2021.06.27
[프로그래머스] 영어 끝말잇기 - 자바스크립트  (0) 2021.06.27
[프로그래머스] 피보나치 수 - 자바스크립트  (0) 2021.06.19
[프로그래머스] 튜플 - 자바스크립트  (0) 2021.06.19
[프로그래머스] 오픈 채팅방 - 자바스크립트  (0) 2021.06.19
    'DS & Algorithm/programmers' 카테고리의 다른 글
    • [프로그래머스] 압축 - 자바스크립트
    • [프로그래머스] 영어 끝말잇기 - 자바스크립트
    • [프로그래머스] 피보나치 수 - 자바스크립트
    • [프로그래머스] 튜플 - 자바스크립트
    jiho_bae
    jiho_bae
    하루에 한 걸음씩

    티스토리툴바