[S] 프로그래머스 #JS - 문자열 내림차순으로 배치하기

SSO·2020년 1월 6일
0

프로그래머스Lv1

목록 보기
13/47

문제

https://programmers.co.kr/learn/courses/30/lessons/12917

풀이

  1. 2020
function solution(s) {
    var answer = '';
    var lenS = s.length;
    var temp1=[];
    var temp2=[];
    var regexUpper = /[A-Z]/g;
    var regexLower = /[a-z]/g;
    
    temp1 = s.match(regexLower);
    temp2= s.match(regexUpper);
  
    if(temp1 !== null){
        temp1.sort().reverse();
    }else{
      temp1 = [];
    }
      
    if(temp2 !== null){
       temp2.sort().reverse(); 
    }else{
      temp2=[];
    }

    var newArr = temp1.concat(temp2);
  
    answer = newArr.join("");
    return answer;
}

풀이과정 문제점

a. 문제를 제대로 안읽음 - 내림차순인데 오름차순으로 구함
b. 알고리즘 지식 부족 - sort method를 변형하면 되는데, 변형방법이 바로 떠오르지 않음
c. 이상한 method조합..으로 해결 - reverse쓸거면 대소문자 왜나눴지..어차피 reverse되는데..
d. 오래걸림...30mins

function solution(s) {
    var answer = '';
    var arr = s.split('');
    var reversed = arr.sort().reverse();
    answer = reversed.join('');
    return answer;
}
  1. 2019
function solution(s) {
    var answer = '';
    var arrayForString = [];
    var lengthOfString = s.length;
    for(var i=0; i<lengthOfString; i++){
        arrayForString[i] = s[i];
    }
    arrayForString.sort(function(a,b){
        if(a<b){
          return 1;
        } else if (a>b){
          return -1;
        } 
        return 0;
    });
    answer = arrayForString.join('');
    return answer;
}

참고사항

Array method - sort(), reverse(), join(), concat()
  sort() - ascending, descending order function
String method - match()®ex, split()

정렬

#참고: 1) sort MDN 2) 관련포스트

1.arr.sort([compareFunction])에서 compareFunction(a,b)은 정렬순서를 정의하는 함수. 주어지지 않을 경우에는 입력값들이 모두 string으로 변환되어 유니코드 표준으로 정렬(오름차순).
2.compareFunction(a, b)반환값이 0보다 작으면, a의 index가 b보다 작다. 반환값이 0보다 크면, b의 index가 a보다 작다.
3.number 비교를 위해서는 array.sort((a,b) => a-b)로 오름차순 정렬 가능.
(a-b가 0보다 작은 값을 반환하는 경우는 오름차순을 의미)

profile
happy

0개의 댓글