문제는 구현하기 쉬웠으나 배울만한 점 두가지가 있어 글을 남기게 된다.
문제는 기본적인 정렬 문제로 간단한 구현 문제였다.
주어지는 파일명마다 head와 number로 나누고 tail부분은 무시 후, head를 대소문자 구분없이 기준삼아 정렬 후 두번째 정렬기준으로 number로 정렬하면 된다.
head와 number를 구분하기 위해 javascript의 내장함수인 isNaN함수를 사용하고, number이후의 tail를 무시하기 위해 number가 빈값이 아닐때 알파벳이 들어오면 파일명 저장을 멈추도록 하였다.
그 후 head와 number, 원래 파일명을 배열로 하여 빈배열에 저장하였다.
파일명들을 head, number, 원래 파일명으로 나누어 모두 저장하고 나면 배열을 정렬하기만 하면 된다. 이를 위해서 javascript의 내장함수인 sort함수와 callback함수를 사용하여 다중조건 정렬을 구현하였다.
이를 이용한 풀이는 다음과 같다.
function solution(files) {
var answer = [];
let list = []
for(const file of files){
let head = ''
let number = ''
for(const f of file){
if(!isNaN(parseInt(f)) && number.length < 6){
number += f
}
else{
if(number){
break
}
head += f
}
}
list.push([head.toLowerCase(), Number(number), file])
}
list.sort((a, b) => {
if(a[0] !== b[0]){
return a[0] > b[0] ? 1 : -1
}
else{
if(a[1] !== b[1]){
return a[1] > b[1] ? 1 : -1
}
else{
return files.indexOf(a[2]) > files.indexOf(b[2]) ? 1 : -1
}
}
})
for(l of list){
answer.push(l[2])
}
return answer;
}
다만 이문제로 배울점이 두가지가 있었는데, 첫번째로 javascript의 내장함수인 isNaN함수는 공백도 숫자로 인식한다는 것이다. 이를 해결하기 위해 문자열을 parseInt로 숫자형으로 바꾸어 해결하였다.
두번째로 callback함수로 다중조건정렬을 하는법인데 조건문과 삼항연산자로 이를 편하게 할 수 있음을 알게 되었다.
'Algorithm' 카테고리의 다른 글
프로그래머스: 숫자 변환하기(javascript, deque, bfs) (0) | 2023.05.09 |
---|---|
프로그래머스: 프렌즈 4 블록(javascript, 구현) (0) | 2023.05.04 |
백준 1987번: 알파벳(javascript, DFS, 백트래킹) (0) | 2023.04.10 |
백준 2529번: 부등호 (javascript, DFS, 백트래킹) (0) | 2023.04.09 |
백준 13913번: 숨바꼭질4 (javascript, BFS) (0) | 2023.04.05 |