1차 공부/알고리즘

정수 내림차순으로 배치하기

공대탈출 2022. 11. 23. 17:08
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다.
n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.
예를들어 n이 118372면 873211을 리턴하면 됩니다.

 

제한 조건
n은 1이상 8000000000 이하인 자연수입니다.

 

 

function solution(n) {
    var answer = 0;
    let a = n.toString().split('')  //입력값을 문자열로 바꾸고 배열로 저장
    let b = ''  //빈 문자열 선언
    for (let i=0; i<a.length; i++) {  //배열의 각 요소를 숫자형으로 만드는 for문
        a[i] = Number(a[i])
    }
    a.sort(function(a,b) {  //b-a이므로 내림차순정렬
        return b-a
    })
    for (i=0; i<a.length; i++){ //내림차순 정렬된 a배열을 한문장으로 만드는 for문
        b += String(a[i]) //요소 하나씩 차례대로 문자열에 입력
    }
    answer = Number(b)  //문자열을 숫자로 변환 후 최종값 반환
    return answer;
}

내가 작성한 코드다.

글을 쓰며 보니 처음 배열로 저장한 a를 다시 숫자로 바꾸고 sort할 필요없이 문자열 상태로 sort해도 된다.

 

 

다른사람이 깔끔하게 풀이하였길래 가져와봤다.

function solution(n) {
  const newN = n + "";  //입력값을 문자열로 변환한다.
  const newArr = newN //문자열을 아래과정을 거쳐 값에 넣는다.
    .split("")  //문자별로 나누어 배열에 저장
    .sort()   //문자이므로 sort()에 콜백함수없음. 오름차순 정렬
    .reverse()  //내림차순을 줘야하므로 배열을 뒤집는다.
    .join("");  //뒤집은 배열을 한 문자열로 만든다.

  return +newArr; //문자열에+를 붙여 숫자로 형변환을 한다.
}

 

여기서 굳이 새로운 값에 넣을 필요가 없고, +로 형변환을 할 필요가 없어보여 내가 간결화 해보았다.

function solution(n) {//
  return (n+'') //입력값을 문자열로 변환하고, 아래과정을 거쳐 최종값을 반환한다.
    .split("")  //문자별로 나누어 배열에 저장
    .sort()   //문자이므로 sort()에 콜백함수없음. 오름차순 정렬
    .reverse()  //내림차순을 줘야하므로 배열을 뒤집는다.
    .join("")  //뒤집은 배열을 한 문자열로 만든다.
    .map(Number); //문자열을 숫자형태로 변경한다.
}

확실히 다양한 메소드를 알고 있으면 알고리즘 문제를 간단하게 표현할 수 있다.

'1차 공부 > 알고리즘' 카테고리의 다른 글

제일 작은 수 제거하기  (0) 2022.11.23
정수 제곱근 판별  (0) 2022.11.23
자연수 뒤집어 배열로 만들기  (0) 2022.11.23
자릿수 더하기  (0) 2022.11.23
이상한 문자 만들기  (0) 2022.11.23