문제 설명 |
함수 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 |