출처-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을 반환하게끔 하였다.
'알고리즘' 카테고리의 다른 글
[알고리즘] 백준허브에서 JS 사용하기 (1) | 2024.05.02 |
---|---|
[알고리즘] 프로그래머스 Lv.1 - 과일 장수(JS) (0) | 2024.04.16 |
[알고리즘]프로그래머스Lv.1 - 완주하지 못한 선수 (JS) (0) | 2024.04.03 |
[알고리즘]프로그래머스 Lv.1 - 기사단원의 무기 (0) | 2024.04.01 |
[알고리즘] 프로그래머스 Lv.1 - 두개 뽑아서 더하기 (0) | 2024.03.30 |