본문 바로가기
알고리즘

[프로그래머스] 문자열 내 맘대로 정렬하기

by limew 2023. 5. 30.

https://school.programmers.co.kr/learn/courses/30/lessons/12915

 

<1번째>

  1. 주의할 점 : n이 같으면 사전순으로 정렬한다
    1. => n끼리 문자들을 분류한다
  2. obj에 [각 n인덱스의 code값]: [문자, 문자...] 이렇게 정리한다.
    1. key = str.charCodeAt(n) 사용
  3. Object.entries()를 돌려서 answer에 문자 순서대로 넣기
  • 문자들 알파벳순으로 정렬: arr.sort((a, b) => a < b ?  -1 : 1) 
  • object의 key가 integer이면 자동으로 정렬된다

 

function solution(strings, n) {
    var answer = [];
    const obj = {};
    
    for (const str of strings) {
        const key = str.charCodeAt(n);
        if (!obj[key]) {
            obj[key] = [str];
        } else {
            obj[key].push(str);
            obj[key].sort((a, b) => a < b ? -1 : 1); // 알파벳 순 오름차순 정렬
        }
    }
    for (const [key, value] of Object.entries(obj)) {
        answer.push(...value);
    }    
    return answer;
}

<2번째>

prev.localeCompare(curr)로 사전순으로 정렬

prev가 curr앞이면 -1리턴 (현재순서가 사전순서면)

curr이 prev앞이면 1리턴

 

n번째가 같으면 문자전체를 localeCompare비교

n번째가 다르면 n번째 문자를 localeCompare비교

function solution(strings, n) {
    return strings.sort((a, b) => a[n] === b[n] ? a.localeCompare(b) : a[n].localeCompare(b[n]))
}