티스토리 뷰

알고리즘/level 1

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

민트초코수장 2020. 12. 10. 01:29

프로그래머스 캡쳐 이미지

1. 문제 해석

strings 배열 안의 배열에서 n번째 문자를 기준으로 오름차순을 한다.

문자가 같을 경우 문자열 전체로 따진다.

2. 문제 해결 방법

sort() 메서드를 사용해서 해결해야 한다.

arr.sort(정렬 순서 정의하는 함수) 로 되어 있는 경우 

정렬 순서 정의하는 함수 = compareFunction(a, b)

  • compareFunction(a, b)의 return 값이 0이면 변경 x
  • compareFunction(a, b)의 return 값이 0보다 크면 b를 a 보다 낮은 인덱스로 정렬 ( a > b)
  •  compareFunction(a, b)의 return 값이 0보다 작으면 a를 b보다 낮은 인덱스로 정렬 (a < b)

sort의 특징을 이용해서 a와 b를 비교해서 return 값을 정해주었다.

function solution(strings, n) {
   strings.sort(function(a,b) {
       let first = a[n];
       let second = b[n];
       if (first === second) {
           if (a < b) {
               return -1;
           }
       }else {
           if (first < second) {
               return -1;
           }else {
               return 1;
           }
       }
   });   
    return strings       
}

더 효율적인 코드 

function solution(strings, n) {
 strings.sort(function(a,b){
        let first = a[n];
        let second = b[n];
        if(first === second){
            return (a > b) - (a < b);
        }else{
            return (first > second) - (first < second);
        }
    })
    return strings;
}

(a > b) - (a < b) 이런식으로 작성하면 값이 정수로 나오게 됩니다.

왜냐하면!

자바스크립트는 Boolean에 산술 연산자를 대입하면 true는 1, false는 0 으로 인식됩니다.

그래서 return 자체를 비교하여 return 값이 1 혹은 -1이 나오게 해줍니다.

 

programmers.co.kr/learn/courses/30/lessons/12915

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

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

programmers.co.kr

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

 

Array.prototype.sort()

sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

developer.mozilla.org

 

반응형

'알고리즘 > level 1' 카테고리의 다른 글

문자열 내 p와 y의 개수  (0) 2020.12.11
문자열 내림차순으로 배치하기  (0) 2020.12.10
문자열 다루기 기본  (0) 2020.12.09
서울에서 김서방찾기  (0) 2020.12.09
수박수박수박수??  (0) 2020.12.09
Comments