SIU
article thumbnail

문제 유형 : 정렬

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

 

프로그래머스

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

programmers.co.kr

 

문제 풀이

오름차순 문자열 비교 : 가장 큰 수 구할 때

.sort((a,b) => (b+a) - (a+b)).join("")

내림차순 문자열 비교 : 가장 작은 수 구할 때

.sort((a,b) => (a+b) - (b+a)).join("")

 

 

테스트 케이스 주의

[0,0,0,0] => "0"

 

 

전체 코드 1) 내림차순 정렬하고 0번째 인덱스가 0인 경우 

function solution(numbers){
    // numbers.map(c=>c+'') = 각 숫자들을 문자로 변환(1 => '1')
    const hignNum = numbers.map(c => c + "").sort((a,b) => (b+a) - (a+b)).join("");
    // sort((a,b) => (b+a)-(a+b)) = 문자로 변환된 숫자를 연결하여 비교정렬 ( '3', '30' => ('303')-('330'))
    // .join('') = 문자열 합치기
    // 모두 0일 때를 고려 "0000000" 내림차순 정렬인데 배열의 인덱스 0번의 값이 0이면 모두 0이다 이때는 숫자 0으로 처리
    return hignNum[0] === '0' ? '0' : hignNum;
}

 

 

전체 코드 2) Math.max() 메소드로 최대값이 0인 경우

function solution(numbers) {
    var answer = '';
    const newArr = numbers.map(e => e + "").sort((a,b) => (b+a) - (a+b)).join("");
    //console.log(newArr);
    return Math.max(...numbers) === 0 ? "0" : newArr;
}

 

profile

SIU

@웹 개발자 SIU

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!