프로그래머스 연습문제 '문자열 내 마음대로 정렬하기'

dowon kim·2023년 5월 24일
0

알고리즘 풀이

목록 보기
3/3
post-thumbnail

question

function solution(strings, n) {
  1. 기준에 맞게 n번째 글자를 기준으로 strings를 정렬해야한다 -> 변수를 추가 선언하지 않고 할 방법은 없을까?
  2. strings의 각 요소의 n번째 글자를 앞에 붙여버리고 오름차순 정렬을 하는 로직을 활용한다면 추가 변수 선언없이 로직을 짤 수 있다.
  3. 그 이후에 포문을 다시한번 돌면서 앞글자만 제거해주고,
  4. 결과를 리턴하면 완성되겠네?
}

my solution

function solution(strings, n) {
    for(let i=0 ; i<strings.length ; i ++){
        strings[i]=strings[i].charAt(n)+strings[i];
    }//for문을 돌면서 각 요소의 n번째 글자를 맨 앞에 추가로 붙여주는 작업을한다.
    strings.sort();// 그 이후 앞글자를 기준으로 오름차순 정렬을 해주고,
    for(let i=0 ; i<strings.length ; i ++){
        strings[i]=strings[i].slice(1);
    }// 정렬된 배열들에서 앞글자를 다시 빼주는 작업을 한다.
    return strings;// 로직에 맞게 구현된 strings를 반환.
}

best solution

function solution(strings, n) {
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
//불필요한 for문 사용 없이 바로 return에서 람다식으로 익명메서드를 불러와 
//오름차순 정렬에 추가 익명메서드를 람다식으로 익명메서드를 만들어 기준에 맞게 비교하는 로직을 짜서 매개변수로 넘겨주고
//로직에 맞게 정렬된 strings를 반환한다.

compare

내 solution에 비해 연산 부하가 큰 for문을 두번이나 덜 선언했고 , 익명메서드를 활용하는 방식으로 인스턴스가
불필요하게 메모리에 남는것 까지 방지한 훌륭한 답안이다.

profile
The pain is so persistent that it is like a snail, and the joy is so short that it is like a rabbit's tail running through the fields of autumn

0개의 댓글