728x90
https://school.programmers.co.kr/learn/courses/30/lessons/17686
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[나의 코드]
function solution(files){
let splittedArray=[]
let answer=[]
for(i=0;i<files.length;i++){
const match = files[i].match(/(\D+)(\d+)(.*)/);
const [total,head,number,tail]=match
splittedArray.push([head,number,tail])
}
const compare =(a,b)=>{
if(a[0].toUpperCase()>b[0].toUpperCase()){
return 1
}else if(a[0].toUpperCase()===b[0].toUpperCase()){
return parseInt(a[1])-parseInt(b[1])
}else{
return -1
}
}
splittedArray.sort(compare)
for(i=0;i<splittedArray.length;i++){
answer.push(splittedArray[i].join(""))
}
return answer
}
정렬 부분은 인강으로 공부를 해서 그다지 어렵지만, 파일명을 head,number, tail 로 정확하게 구분하는 것이 가장 어려운 부분이었다.
정규표현식(regular expression)은 정말 봐도 봐도 잘 기억에 남지 않는것 같다.
몇가지 어려웠던 포인트들을 꼽자면,
1. 공백이 있는 경우 공백까지도 포함해서 head,number,tail을 쪼개야 마지막에 splittedArray[i].join("")을 해도 원래의 파일명을 그대로 복원 할 수 있다.
2. array.split(/[0-9]+/) 의 경우 모든 숫자를 기준으로 분리를 하고 해당 숫자는 분리되지 않는다. 또한 맨 첫번째로 나오는 연속된 숫자들의 묶음을 기준으로 나눠야 하기 때문에 숫자가 뒤에도 나올 경우에 적합하지 않는다(<= 이부분 때문에 코너케이스 잡느라 1시간 넘게 씀...)
728x90
'알고리즘' 카테고리의 다른 글
프로그래머스 > 2018 KAKAO BLIND RECRUITMENT > [3차] 압축 (0) | 2023.04.17 |
---|---|
프로그래머스 > 2018 KAKAO BLIND RECRUITMENT > [1차] 뉴스 클러스터링 (1) | 2023.04.17 |
프로그래머스 > 2022 KAKAO BLIND RECRUITMENT > 주차 요금 계산 (0) | 2023.04.12 |
프로그래머스 > 월간 코드 챌린지 시즌3 > N^2 배열 자르기 (0) | 2023.04.10 |
JavaScript 정렬 라이브러리 (0) | 2023.04.09 |