반응형
문제
0 또는 양의 정수가 주어졌을 때,
정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면
[6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고,
이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때,
순서를 재배치하여 만들 수 있는 가장 큰 수를
문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers return
[6, 10, 2] 6210
[3, 30, 34, 5, 9] 9534330
처음 작성한 코드
->처음에는 배열에 들어있는 숫자의 앞자리를 일일히 비교해서 새로운 배열에 넣고 정렬을 해주려고 했다...
//앞자리로 비교해서 위치 선정 -> 10보다 크면 1의 자리 비교해서 위치 선청
//앞자리로 비교하고 실제로 배치할때에는 전체 숫자로 해야함!
function solution(numbers) {
let answer = 0;
let newArr = [];
let overTen = 0;
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] < 10) {
newArr.push(numbers[i]);
newArr.sort((a, b) => b - a);
} else {
overTen = numbers[i] / 10;
newArr.push(overTen);
newArr.sort((a, b) => b - a);
}
console.log(newArr);
}
return answer;
}
최종 코드
-> 해당 배열의 원소를 바로 문자로 바꿔서/ 두개씩 붙여서 비교를 해서 배열에서 정렬을 해주고/ 정렬된 배열을 문자로 바꾸면 된다!
function solution(numbers) {
let answer = numbers
.map((v) => v + "") //각각의 숫자를 문자로 변환
.sort((a, b) => b + a - (a + b)) //문자로 변환된 숫자를 연결하여 배열에서 비교 정렬(내림차순)
.join(""); //배열에서 정렬된 숫자를 다시 문자로 변환
return answer[0] === "0" ? "0" : answer; //numbers 배열이 0으로만 구성되어있을 때 '0'만 출력
}
배운점
더 직관적으로 작성할 수 있는 코드를 연습하자!
728x90
'Algorithm' 카테고리의 다른 글
[ 프로그래머스 ] 약수의 합 - 자바스크립트 ( javascript ) (0) | 2023.02.12 |
---|---|
[ 프로그래머스] 약수의 개수와 덧셈 - 자바스크립트 ( javascript ) (0) | 2023.02.12 |