Programmers 프로그래머스 코딩테스트 연습 - 가장 큰 수 (JavaScript)
Programmers(프로그래머스)의 코딩테스트 연습문제 Level 2 중 가장 큰 수 문제를 JavaScript로 풀어보도록 하겠습니다.
문제 설명
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" |
작성한 답
solution.js
function solution(numbers) {
return numbers.map(a=>a+'').sort((a,b)=>(b+a)-(a+b)).join('').replace(/^0+/g, '0');
}
설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내는 문제입니다.
- 먼저 숫자로서가 아닌 문자열로서 어떤 요소가 앞에 와야 더 큰지를 비교하기 위해 map() 함수를 사용해 숫자인 요소들을 문자열로 바꿉니다.
- 어떤 요소가 앞에 와야 더 큰 수의 문자열을 만들어 낼 수 있는지 비교하여 정렬합니다. 가령 [5, 50]의 요소가 있다면 ('5', '50')=>('50'+'5') - ('5'+'50'), 즉 505 - 550의 결과로 정렬이 됩니다.
- 정렬된 요소를 join('')으로 하나의 문자열로 합칩니다.
- [0, 0, 0, 0] 과 같은 배열이 들어오면 "0000" 이 될수도 있으므로 replace()와 정규식을 사용하여 0으로 시작하는 문자열은 0으로 변경합니다.
- 결과를 반환합니다.
제 글에 잘못된 정보, 더 좋은 방법 혹은 정보,
궁금하신 점, 요청 사항 등이 있으시다면 언제든지 말씀해 주세요!
감사합니다.
'Developer > Algorithm' 카테고리의 다른 글
Programmers 코딩테스트 연습 - 3진법 뒤집기 (JavaScript) (0) | 2021.01.19 |
---|---|
Programmers 코딩테스트 연습 - 내적 (JavaScript) (0) | 2021.01.18 |
Programmers 프로그래머스 코딩테스트 연습 - 중복 제거하기 (MYSQL) (0) | 2020.09.22 |
Programmers 프로그래머스 코딩테스트 연습 - 동물 수 구하기 (MYSQL) (0) | 2020.09.20 |
Programmers 코딩테스트 연습 - 최솟값 구하기 (MYSQL) (0) | 2020.09.19 |
댓글