점수 내림차순으로 배치하기(Javascript)

·2022년 9월 14일
0
post-thumbnail

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건

n은 1이상 8000000000 이하인 자연수입니다.

입출력 예

nreturn
118372873211

나의 풀이

function solution(n) {
    let descending = (n+"").split("").sort(function(a,b){
        return b-a
    }).join('')*1;
  //n+""으로 문자로 바꾸기
  //split("")으로 문자를 공백으로 나눠주기
  //sort를 사용해서 내림차순으로 정렬
  //join으로 배열의 문자를 전부 합쳐줌
  //*1로 문자를 숫자로 바꿔줌.
    return descending;
}

""과 ''는 동일한 의미이므로 통일해서 쓰도록 신경을 써야겠다. 문제 자체는 어렵지 않았는데 가독성이 좀 떨어지는 듯 하다.

sort는 배열을 정렬해주는 함수이다. 숫자도 문자로 변환시켜서 작은 순서대로 정렬을 하기 때문에 [1, 10, 2, 20] 이런 식으로 정렬이 된다.
sort의 파라미터로는 정렬 기준을 써 주면 된다. 숫자를 정렬시키려면 이런 식으로 써 주면 된다.

.sort(function(a,b){
a-b});

여기에서 a-b의 값이 음수이면 a가 b보다 작다는 의미이므로 a를 b앞으로 보내준다. 양수이면 a 뒤로 b를 보내준다. 따라서 오름차순으로 정렬이 된다. 이걸 응용해서

.sort(function(a,b){
b-a});

이렇게 써 주면 내림차순으로 정렬할 수가 있다.

join은 배열의 모든 요소를 연결해 문자로 만들어 준다. 문자로 바꾸기 때문에 마지막에 *1을 사용해서 숫자로 바꾸어 줘야 한다.

참고할 풀이1

function solution(n) {
  const newN = n + "";
  const newArr = newN
    .split("")
    .sort()
    .reverse()
    .join("");

  return +newArr;
}

기본적으로 푸는 방식은 유사하다. 나는 sort의 파라미터로 내림차순 정렬 되도록 만들어줬는데 이 풀이는 reverse()함수를 사용해서 오름차순으로 정리한 다음 내림차순으로 바꾸어 줬다. 그리고 .구간을 모아서 가독성이 좋게 만들어 줬다. 나는 *1로 문자를 숫자로 바꿔줬는데 앞에 +를 붙여줘도 숫자로 바뀐다.
출처 : 자바스크립트 공식 문서

참고할 풀이2

function solution(n) {
    var nums =[];
    do{
        nums.push(n%10);
        n=Math.floor(n/10);
    } while(n>0)

    return nums.sort((a,b)=>b-a).join('')*1;

이 문제도 숫자로 풀 수 있을 듯 하다. 자연수 n을 do while문을 이용해서 숫자 배열로 바꿔준다(ex: n이 274 이라면 [2,7,4]). 이것을 sort문을 이용해서 내림차순 정리해 준다. 나는 함수를 써 줬지만 arrow function을 사용해서 간략하게 표시해 줬다. join을 사용하면 문자로 바뀌므로 마지막에 숫자로 바꿔 준다.

profile
전 이것도 몰라요

0개의 댓글