자료구조, 알고리즘
[프로그래머스] 가장 큰 수 문제 자바스크립트 풀이
개발공주
2021. 11. 1. 12:02
728x90
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
1. 접근 방법
(1) 조건을 충족하는 방식으로 compare하는 함수를 만든다.
const isLeftBiggerThanRight = (left, right) => {
if ((String(left) + String(right)) >= (String(right) + String(left))) {
return true;
} else {
return false;
}
}
(2) 퀵 정렬을 하여 결과를 이어붙여 리턴한다.
const quickSort = (numbers) => {
if (numbers.length <= 1) return numbers;
let mid = numbers[0];
let left = [];
let right = [];
for (let i = 1; i < numbers.length; i++) {
if (isLeftBiggerThanRight(numbers[i], mid)) {
left.push(numbers[i]);
} else {
right.push(numbers[i]);
}
}
return [...quickSort(left), mid, ...quickSort(right)];
}
2. 해답 코드
const isLeftBiggerThanRight = (left, right) => {
if ((String(left) + String(right)) >= (String(right) + String(left))) {
return true;
} else {
return false;
}
}
const quickSort = (numbers) => {
if (numbers.length <= 1) return numbers;
let mid = numbers[0];
let left = [];
let right = [];
for (let i = 1; i < numbers.length; i++) {
if (isLeftBiggerThanRight(numbers[i], mid)) {
left.push(numbers[i]);
} else {
right.push(numbers[i]);
}
}
return [...quickSort(left), mid, ...quickSort(right)];
}
function solution(numbers) {
if (numbers.length <= 1) return String(numbers)
const sorted = quickSort(numbers);
const answer = sorted.join('');
if (answer[0] == 0) return "0";
return answer
}
자바스크립트 내장 함수 sort()를 사용해도 되었지만 이번에 공부한 퀵 정렬을 활용해보고 싶었다.
사실 이 코드 보고 충격을 받았지만 애써 못본척 했다.
function solution(numbers) {
var answer = numbers.map(c=> c + '').
sort((a,b) => (b+a) - (a+b)).join('');
return answer[0]==='0'? '0' : answer;
}
728x90