본문 바로가기
알고리즘

[Programmars] 정수 내림차순으로 배치하기 (JavaScript)

by 프린벼르 2022. 1. 31.

정수 내림차순 배치 문제

1. 나의 생각 흐름

제한 조건은 문제풀때 중요한 조건이 아니라고 생각하기에 패스! (왜냐하면 n을 입력할 사람들이 더 봐야할 조건이기때문에.. 괜히 신경쓰면 더 헷갈리니..) 입력받은 n을 배열로 변환한 후 다시 숫자배열로 변환해주기 => 배열의 내림차순 함수로 정렬하기 => 배열에서 하나의 원소로 묶어주기 => 문자열 배열을 숫자로 변환시켜주기

2. 코드 정리

function solution(n) {
    let answer = 0;
    //["1","1","8","3","7","2"] : .map(Number)를 뒤에 붙이지 않았을 경우
    //split 함수뒤에 .map(Number)만 써주면 자동으로 문자가 숫자로 바뀌어 배열로 들어감
    let arr = (n+'').split('').map(Number); // 결과값 : [1,1,8,3,7,2]
    arr.sort(function(a, b){return b - a;}); // 결과값 : [8,7,3,2,1,1]
    let str = arr.join(''); // 결과값 : "873211"
    answer = Number(str); // 결과값 : 873211
    return answer;
}
< "숫자->문자"로 변환 후 배열로 만들기 : split이용 > 
타입이 숫자(number)인 경우 split을 사용할 수 없기 때문에 숫자에 ''을 더해 문자로 만들어주고, split('')을 사용하여
배열로 만들어 주는 방법!! ===> let arr = (n + '').split('').map(Number);
★ .map(Number)를 split 함수 뒤에 써주면 자동으로 문자=>숫자 바껴서 배열로 들어가게 됨! ★
** 문자 정렬 :  arr.sort();
// 일반적인 정렬 방법
let arr = ["heum","star","love","forever"];
arr.sort();​

** 숫자 정렬
//문자 정렬과 동일한 방법으로 정렬하면 아스키코드 순으로 정렬되어 숫자의 크기대로 정렬되지❌❌❌!!

//오름 차순 정렬
let arr = [1, 111, 4, 222, 10, 3]; 
arr.sort(function(a,b) {return a-b;});

//내림 차순 정렬
let arr = [1, 111, 4, 222, 10, 3];
arr.sort(function(a,b) {return b-a;});​
** join() 메서드
        배열의 모든 요소를 연결해 하나의 문자열로 반환
// Array → String (배열 → 문자열): join() 이용
const arr = ['h', 'e', 'l', 'l', 'o'];
const str1 = arr.join();	// 문자열 'h,e,l,l,o'
const str2 = arr.join('+');	// 문자열 'h+e+l+l+o'
const str3 = arr.join('');	// 문자열 'hello'

//만약  arr.length가 0이면 빈 문자열을 반환합니다
// Array → String (배열 → 문자열): join() 이용
const arr = [];
const str = arr.join();		// 문자열 ''

//만약, 배열의 요소가 undefined 또는 null이면 빈 문자열로 변환합니다.
// Array → String (배열 → 문자열): join() 이용
const arr = [undefined, null, 'hello'];
const str1 = arr.join();	// 문자열 ',,hello'
const str2 = arr.join('');	// 문자열 'hello'​

** String → Array (문자열 → 배열)
       [ split() 사용하기 ]
        - String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눕니다.
// String → Array (문자열 → 배열)
const str = 'Hello';
const arr = str.split(''); // 배열 ['h', 'e', 'l', 'l', 'o']​

** Array → String (배열 → 문자열)
       [ toString() 사용하기 ]
       - toString()메서드는 지정된 배열 및 그 요소를 나타내는 문자열을 반환합니다.
         ※ 배열의 각 요소들이 쉼표(,)로 구분되어 하나의 문자열로 반환
// Array → String (배열 → 문자열): toString() 이용
const arr = ['h', 'e', 'l', 'l', 'o'];
const str = arr.toString();	// 문자열 'h,e,l,l,o'

3. 다른 사람의 코드

function solution(n) {
    let answer = "";
    answer = String(n).split("").sort((a, b) => b-a).join('')
    
    return Number(answer);
}
1. 주어진 숫자를 String() 을 통해서 문자열로 변환
2. split() 을 통해서 배열로 변형배열에서 sort((a,b) => b-a) 로 내림차순 정렬한다.
3. join('') 을 이용해서 배열의 모든 문자열을 하나의 문자열로 합쳐준다.
4. Number() 를 통해서 숫자로 바꿔주고 리턴해준다.

4. 결론 

배열 부분에서 알아둬야 할 부분들이 많은 것 같다. 앞으로 공부 열심히해서 더 많이 익히도록 해야겠다.

댓글