알고리즘

[알고리즘] 프로그래머스 Lv.2 - 가장 큰 수(JS)

로돌씨 2024. 4. 4. 02:24

출처-https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

 

풀이

function solution(numbers) {
    //numbers를 문자열로 변환시킴
    var answer = numbers.map((v) => v+"")
    //문자열 b+a를 조합한값을 숫자로 변환 , a+b를 조합한값을 숫자로 변환
    //그 중 더 큰값을 기준으로 정렬 후 다시 문자열로 변환
    .sort((a,b) => (b+a) * 1 - (a+b) * 1).join("");
    //만약 answer의 첫번째 요소가 0이라면 0을 반환하고 , 아니라면 answer 를 반환
    //0으로만 이루어져있다면 0000000 - 을 반환 하기 때문
    return answer[0] === "0" ? "0" : answer;
}

 

처음에는 sort만으로 변환을 한 뒤 reverse를 하면 해결이 될 거라 생각했다.

하지만 그렇게 하니 9543303을 반환해서 9543330을 반환하지못해 실패했었다.

 

각요소를 map을 이용해 문자열로 만들어 주고 sort함수에 a,b를 넣고 문자열 b + a 를 숫자로 바꾼값과  a + b

중 무엇이 더큰지 비교하여 정렬을 하여 더 큰값을 기준으로 내림차순으로 정렬해 해결할 수 있었다 .

만약 0으로만 이루어진 배열이라면 최대값 또한 0이기때문에 000000... 으로 나오는 결과를 막기위해 answer의 첫 숫자가 0이라면 0을 반환하게끔 하였다.