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

치와와견주·2024년 12월 24일
0

문제에서 주어진 값 : 정수 배열
결과 값 : 주어진 정수들을 이여붙여 만들 수 있는 숫자들 중 가장 큰 수

수도 코드
1. 앞자리가 큰순서대로 정렬되야 한다.
2. 주어진 배열을 위 순서대로 내림차순 정렬한다.
3. 정렬된 배열을 reduce함수를 이용해서 하나의 문자열 숫자로 만든다.

단, 같은 숫자로 시작하는 숫자의 경우, 두 값을 비교해서 정렬한다.
예를들어, 3과 31의 경우 [3, 31] 순으로 정렬되어야 한다.
3과 36의 경우 [36, 3] 순으로 정렬되어야 한다.

이 조건을 어떻게 정렬할 수 있을까?

  • 자바스크립트의 sort로 비교하되 두 값을 문자열 비교한다.
  • 자바스크립트의 문자열 비교 함수 localeCompare를 이용한다.

위 내용을 기반으로 작성된 코드는 다음과 같습니다.

function solution(numbers) {
    
    const sorted = numbers.map(String).sort((a, b) => {
        return (b + a).localeCompare(a + b)
    })
    
    return sorted.reduce((acc, curr) => {
        return `${acc}${curr}`
    })    
}

다만, 위 코드로 제출시 한 문제가 통과가 되지 않았습니다. 생각하지 못한 경우의 수는 뭐가 있을까요?

바로, 0만으로 이루어진 배열의 경우 다음과 같은 문제가 발생합니다.
[0,0,0,0] => 결과 "0000"

이러한 경우를 방지하기 위해 reduce함수에 다음 조건문을 추가해 줍니다.

        if(acc === "0") {
            return acc;
        }

완성된 전체 코드는 다음과 같습니다.

function solution(numbers) {
    
    const sorted = numbers.map(String).sort((a, b) => {
    
        return (b + a).localeCompare(a + b)
    
    })
    
    return sorted.reduce((acc, curr) => {
        if(acc === "0") {
            return acc;
        }
        return `${acc}${curr}`
    })    
}

이렇게 프로그래머스 "정렬" 문제인 큰 수 찾기 문제를 해결할 수 있었습니다.

profile
건들면 물어요

0개의 댓글

관련 채용 정보