자료구조와 알고리즘
[프로그래머스 JS] 가장 큰 수
AgileJung
2022. 6. 17. 17:06
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 = [6, 10, 2]
return = "6210"
내가 푼 풀이
function solution(numbers) {
var answer = '';
let a = numbers.sort();
a.reverse();
let b = a.join();
let c = b.split(",");
for(let i = 0; i < numbers.length; i++){
answer += c[i]
}
return answer;
}
33.3점 맞은 풀이 => 이유는 예를 들어 3, 30 있다면 조합은 두 가지가 가능하다. 330과 303 숫자 자체는 30 더 크나 조합을 했을 땐 330이 더 큰 수이다 그래서 자릿수가 앞자리가 같고 뒤에 0이 있다면 더 큰 수를 뒤로 보내서 조합해야 한다.
기수 정렬을 사용하면 문제가 해결될 줄 알았지만 사용 시 3, 30, 34 순으로 정렬되어 이것도 해당하지 않는 풀이였다.
다른 사람들의 풀이
function solution(numbers) {
var answer = numbers.map(c=> c + ''). //map(String)도 가능
sort((a,b) => (b+a) - (a+b)).join('');
return answer[0]==='0'? '0' : answer;
}
너무나 간단해서 놀랐다.
map매소드를 사용하여 숫자를 문자로 바꿔주고, sort 정렬 기준을 내림차순으로 바꿔 3, 30의 자리를 바꿔줘서 풀었다.
그리고 배열의 0번째 숫자가 0이라면 0을 리턴하고 아니면 answer를 리턴해준다. 배열이 0만으로 구성되어 있을 수 있기 때문에...
728x90
반응형