본문 바로가기
Developer/Algorithm

Programmers 코딩테스트 연습 - 가장 큰 수 (JavaScript)

by roqkfrlfhr 2020. 10. 17.

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 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내는 문제입니다.

  1. 먼저 숫자로서가 아닌 문자열로서 어떤 요소가 앞에 와야 더 큰지를 비교하기 위해 map() 함수를 사용해 숫자인 요소들을 문자열로 바꿉니다.
  2. 어떤 요소가 앞에 와야 더 큰 수의 문자열을 만들어 낼 수 있는지 비교하여 정렬합니다. 가령 [5, 50]의 요소가 있다면 ('5', '50')=>('50'+'5') - ('5'+'50'), 즉 505 - 550의 결과로 정렬이 됩니다.
  3. 정렬된 요소를 join('')으로 하나의 문자열로 합칩니다.
  4. [0, 0, 0, 0] 과 같은 배열이 들어오면 "0000" 이 될수도 있으므로 replace()와 정규식을 사용하여 0으로 시작하는 문자열은 0으로 변경합니다.
  5. 결과를 반환합니다.

 

 

 

제 글에 잘못된 정보, 더 좋은 방법 혹은 정보, 

궁금하신 점, 요청 사항 등이 있으시다면 언제든지 말씀해 주세요!

 

감사합니다.


댓글