728x90
https://programmers.co.kr/learn/courses/30/lessons/17686
문제
- 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다.버전 번호 외에도 숫자가 포함된 파일 목록은 여러 면에서 관리하기 불편했다. 예컨대 파일 목록이 ["img12.png", "img10.png", "img2.png", "img1.png"]일 경우, 일반적인 정렬은 ["img1.png", "img10.png", "img12.png", "img2.png"] 순이 되지만, 숫자 순으로 정렬된 ["img1.png", "img2.png", "img10.png", img12.png"] 순이 훨씬 자연스럽다.소스 파일 저장소에 저장된 파일명은 100 글자 이내로, 영문 대소문자, 숫자, 공백(" "), 마침표("."), 빼기 부호("-")만으로 이루어져 있다. 파일명은 영문자로 시작하며, 숫자를 하나 이상 포함하고 있다.
- HEAD는 숫자가 아닌 문자로 이루어져 있으며, 최소한 한 글자 이상이다.
- NUMBER는 한 글자에서 최대 다섯 글자 사이의 연속된 숫자로 이루어져 있으며, 앞쪽에 0이 올 수 있다. 0부터 99999 사이의 숫자로, 00000이나 0101 등도 가능하다.
- TAIL은 그 나머지 부분으로, 여기에는 숫자가 다시 나타날 수도 있으며, 아무 글자도 없을 수 있다.
파일명 HEAD NUMBER TAIL foo9.txt foo 9 .txt foo010bar020.zip foo 010 bar020.zip F-15 F- 15 (빈 문자열) - 파일명은 우선 HEAD 부분을 기준으로 사전 순으로 정렬한다. 이때, 문자열 비교 시 대소문자 구분을 하지 않는다. MUZI와 muzi, MuZi는 정렬 시에 같은 순서로 취급된다.
- 파일명의 HEAD 부분이 대소문자 차이 외에는 같을 경우, NUMBER의 숫자 순으로 정렬한다. 9 < 10 < 0011 < 012 < 13 < 014 순으로 정렬된다. 숫자 앞의 0은 무시되며, 012와 12는 정렬 시에 같은 같은 값으로 처리된다.
- 두 파일의 HEAD 부분과, NUMBER의 숫자도 같을 경우, 원래 입력에 주어진 순서를 유지한다. MUZI01.zip과 muzi1.png가 입력으로 들어오면, 정렬 후에도 입력 시 주어진 두 파일의 순서가 바뀌어서는 안 된다.
- 파일명은 크게 HEAD, NUMBER, TAIL의 세 부분으로 구성된다.
- 무지는 단순한 문자 코드 순이 아닌, 파일명에 포함된 숫자를 반영한 정렬 기능을 저장소 관리 프로그램에 구현하기로 했다.
- 저장소 서버에는 프로그램의 과거 버전을 모두 담고 있어, 이름 순으로 정렬된 파일 목록은 보기가 불편했다. 파일을 이름 순으로 정렬하면 나중에 만들어진 ver-10.zip이 ver-9.zip보다 먼저 표시되기 때문이다.
입력 형식
입력으로 배열 files가 주어진다.
- files는 1000 개 이하의 파일명을 포함하는 문자열 배열이다.
- 각 파일명은 100 글자 이하 길이로, 영문 대소문자, 숫자, 공백(" "), 마침표("."), 빼기 부호("-")만으로 이루어져 있다. 파일명은 영문자로 시작하며, 숫자를 하나 이상 포함하고 있다.
- 중복된 파일명은 없으나, 대소문자나 숫자 앞부분의 0 차이가 있는 경우는 함께 주어질 수 있다. (muzi1.txt, MUZI1.txt, muzi001.txt, muzi1.TXT는 함께 입력으로 주어질 수 있다.)
결괏값 예시
입력: ["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"]
출력: ["img1.png", "IMG01.GIF", "img02.png", "img2.JPG", "img10.png", "img12.png"]
입력: ["F-5 Freedom Fighter", "B-50 Superfortress", "A-10 Thunderbolt II", "F-14 Tomcat"]
출력: ["A-10 Thunderbolt II", "B-50 Superfortress", "F-5 Freedom Fighter", "F-14 Tomcat"]
기본 제공 틀
function solution(files) {
var answer = [];
return answer;
}
풀이 [JavaScript]
function solution(files) {
var items = [];
var answer = [];
for(var i=0; i<files.length; i++){
var file = files[i];
var tmp = files[i].split('');
var head = "";
var number = "";
var numBreak = false;
for(var j=0; j<tmp.length; j++){
if(/[0-9]/.test(tmp[j])){
number += tmp[j];
numBreak = true;
}else if(numBreak){
break;
}else{
head += tmp[j];
}
}
items.push({head: head, number: Number(number), file: file});
}
// name 기준으로 정렬
items.sort(function(a, b) {
var headA = a.head.toLowerCase();
var headB = b.head.toLowerCase();
var numberA = a.number;
var numberB = b.number;
if (headA < headB) {
return -1;
}
if (headA > headB) {
return 1;
}
// 이름이 같을 경우
if(numberA < numberB){
return -1;
}
if(numberA > numberB){
return 1;
}
return 0;
});
for(var k=0; k<items.length; k++){
answer.push(items[k].file);
}
return answer;
}
728x90
채점 결과 [JavaScript]
728x90
'알고리즘 스터디 > 프로그래머스 스킬체크 레벨 2' 카테고리의 다른 글
[프로그래머스 스킬체크 레벨 2] 카펫 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2022.01.10 |
---|---|
[프로그래머스 스킬체크 레벨 2] 올바른 괄호 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.12.20 |
[프로그래머스 스킬체크 레벨 2] [3차] 방금그곡 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.12.17 |
[프로그래머스 스킬체크 레벨 2] H-Index 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.12.17 |
[프로그래머스 스킬체크 레벨 2] JadenCase 문자열 만들기 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.12.06 |
댓글