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

정호·2023년 6월 5일
0

문제 풀이

목록 보기
33/60

문제 링크

1️⃣ 문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.


2️⃣ 제한 사항

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

3️⃣ 입출력 예

4️⃣ 나의 풀이

function solution(strings, n) {
    return strings.sort((a, b)=>{
        if(a[n] === b[n]){
            return a < b ? -1 : 1;
        } else if(a[n] < b[n]){
            return -1;
        } else {
            return 1;
        }
    });
}

첫 번째 매개변수는 작은 색인의 기준/두 번째 매개변수는 큰 색인의 기준
sort함수 사용

  • if(a < b) return 1은 내림차순, if(a < b) return -1은 오름차순
    if(b < a) return 1은 오름차순, if(b < a) return -1은 내림차순
    a는 작은 기준, b는 큰 기준 return이 1은 해당 조건대로 정렬, -1은 해당 조건의 반대로 정렬, 0 이면 변경 하지 않고 넘어간다.

다른사람의 풀이

function solution(strings, n) {
    //사전순으로 앞선 문자열 먼저 정렬
    strings.sort();
    //charCodeAt으로 아스키코드로 변환 후 해당 문자 기준으로 정렬
    strings.sort((a,b) => a.charCodeAt(n) - b.charCodeAt(n));
    return strings;
}

사전순으로 정렬
["bbc", "abc"] 배열과 1이 주어질때 둘다 동일한 b로 정렬하게 된다.--> 순서대로 bbc, abc가 반환
abcbbc보다 사전순으로 앞에 있기 때문에 abc, bbc순으로 리턴되어야만 테스트케이스를 통과한다.
따라서 사전순으로 정렬 해준후, 아스키 코드로 변환된 n번째 값을 비교하여 오름차순으로 정렬해주면 됩니다.

charCodeAt(MDN)

profile
열심히 기록할 예정🙃

0개의 댓글