728x90
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고,
이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여
만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
문제 풀이 방법
- 우선 숫자가 배열에 감싸여져 전달이 된다.
- map()를 이용해 numbers의 각 요소에게 toString()한다.
- 반환된 배열을 sort()로 정렬하는데 주의할 점이있다.
3, 30, 34를 정렬할 때, 문제에서 나열했을 때 가장 큰 값이 나오게 하려면
34, 3, 30의 순서를 갖아야 한다.
sort((a,b) => (b+a) - (a+b))에서 문자열로 변환된 요소들이 비교되어 정렬될 로직이 결정된다. - join()으로 배열의 모든 요소들을 문자열로 변환해준다.
- 마지막으로 answer 값이 0...0이 될 수 있기에 replace()을 통해 0으로 변환 후 반환해준다.
주의 사항
- sort()의 규칙과 마지막 answer값의 replace()의 중요성을 잊지 말자.
참고 문헌
- Array.prototype.map() : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map
- Array.prototype.sort() : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
- 참고한 블로그 글 : https://miiingo.tistory.com/343
코드
function solution(numbers) {
let answer = numbers.map(n => n.toString()).sort((a,b)=>(b+a)-(a+b)).join('');
return answer.replace(/^0+/, "0");
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
완전탐색 / 1 / 모의고사 (JS) (0) | 2022.06.09 |
---|---|
정렬 / 2 / H-Index (JS) (0) | 2022.06.08 |
정렬 / 1 / K번째 수 (JS) (0) | 2022.06.08 |
해시 / 3 / 베스트앨범 (JS) (0) | 2022.06.07 |
해시 / 2 / 위장 (JS) (0) | 2022.06.07 |