프린세스 다이어리

[프로그래머스] 가장 큰 수 문제 자바스크립트 풀이 본문

자료구조, 알고리즘

[프로그래머스] 가장 큰 수 문제 자바스크립트 풀이

개발공주 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
Comments