[프로그래머스] 가장 큰 수

nRecode·2021년 2월 19일
0

Algorithm

목록 보기
39/48

프로그래머스 | 가장 큰 수

문제

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: [3, 30, 34, 5, 9]
return: 9534330

접근

문제의 요구사항에 따라 앞자리가 높은 것이 먼저 와야합니다. 만약 앞자리가 똑같더라도 다음 자리 수를 비교하여야 합니다.
또, 30과 3과 같은 수를 비교할 때, 303보다 330이 더 큰 수이기 때문에 3이 앞에 위치해야 합니다. 이를 통해 앞자리가 똑같고 자릿수가 다른 숫자가 있을때도 역시 구분해 줘야 함을 의미합니다.

sort함수를 사용합니다. mdn | sort()를 참고하여 작성하였습니다.(sort 계속헷갈림...ㅜ)

풀이

function solution(numbers) {
    numbers = numbers.sort((a,b) => (b.toString() + a.toString()) - (a.toString() + b.toString())).join('');
    
  // "000"같은 경우에 "0"를 return하기 위함
    return numbers[0] === '0' ? "0" : numbers;    
}

sort의 비교할 함수인 compareFunction(a, b)가 return 값이 0보다 큰 경우, b를 a보다 낮은 인덱스로 소트하는 것을 이용한 방법입니다.

추가로 '000' === 0은 false이지만 '000' == 0 은 true이다 ^^

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글