본문 바로가기

JavaScript

프로그래머스 javascript 문제풀이 - 가장 큰 수

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 합니다.

입출력 예
numbers 	return
[6, 10, 2] 	"6210"
[3, 30, 34, 5, 9] 	"9534330"
*/
function solution(numbers){
	var answer = numbers.map(e => e + "")
    answer.sort((a,b) => {
        return (b+a) - (a+b)
    })
    answer.join('')
    if(answer.join('').length == answer.join('').split("0").length-1)
        return 0
   return answer.join('')
}
console.log(solution([6, 10, 2]),"6210")
console.log(solution([3, 30, 34, 5, 9]),"9534330")
console.log(solution([0, 0, 0, 0, 0] , 0))

 

 

처음에는 숫자의 우선순위를 맞추기 위해

 

6 10 2를

 

6000 1000 2000 으로 동일한 자릿수로 변환한 뒤 정렬하는 방식으로 구현해보았다.

(이때 6과 60을 구별하기 위해 몇번 곱했는지 카운트하는것까지 고려함)

 

그러나 시간초과로 인해 다른 방법을 찾아야 했고,

 

찾아보니 위와같은 간결한 방법이 있었다.

 

 

문자열 배열을 정렬할때 

1. 앞자리가 큰수이거나,

2. 자릿수가 짧거나

 

인 성질을 이용하여 위와같이

[6 10 2]배열에서

610과

106 중 어떤 값이 더 큰지 체크하는 로직을 구현하는 것이다.

 

나름 기발한 발상이 필요하지만 그래도 센스로 알 수도 있었어야 했는데 그렇게 하지 못해 아쉽다.

 

 

728x90