프로그래머스 문제 풀이 문자열 내 마음대로 정렬하기 (JS)

devmomo·2021년 3월 12일
0

알고리즘

목록 보기
24/52
post-thumbnail

문자열 내 마음대로 정렬하기

문제분석
문자열로 구성된 리스트 strings와 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순으로 정렬하려고 합니다.

조건
1. strings의 길이는 1이상 50이하인 배열
2. strings의 원소는 소문자 알파벳으로 이루어져 있음
3. strings의 원소는 길이 1이상 100이하인 문자열
4. 모든 strings의 원소의 길이는 n보다 큽니다.
5. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치


strings = ["sun","bed","car"] , n = 1 이면 ["car","bed","sun"]
strings = ["abce","abcd","cdx"] , n =2 이면 ["abcd","abce","cdx"]
문제풀이

function solution(strings, n) {
let copy = strings.slice();
let sortArr = copy.sort().map((data)=>[data[n],strings.indexOf(data)]);
let temp = sortArr.map((data)=>data[0]).sort();
let result = [];
for (let i = 0; i<temp.length;i++){
    let findData = sortArr.find((data)=>data[0]===temp[i]);
    let findIndex = sortArr.indexOf(findData);
    result.push(strings[findData[1]]);
    sortArr.splice(findIndex,1);
}
return result;    
}

다른풀이

function solution(strings, n) {
    // strings 배열
    // n 번째 문자열 비교
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
function solution(strings, n) {
	return strings.map(a=>[...a][n]+a).sort().map(a=>a.substring(1))
}
function solution(strings, n) {
    return strings.sort((a, b) => {
        const chr1 = a.charAt(n);
        const chr2 = b.charAt(n);
        if (chr1 == chr2) {
            return (a > b) - (a < b);
        } else {
            return (chr1 > chr2) - (chr1 < chr2);
        }
    })
}
profile
FE engineer

0개의 댓글