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

재오·2023년 5월 5일
1

코딩테스트

목록 보기
24/46
post-thumbnail

🗒️ 문제

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

⚠ 제한사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

📝 문제 해설

우선 String 하나를 만들어줘야 한다. 거기에서 비교한 숫자가 큰 수를 넣어주면 된다. 배열에 있는 수를 모두 String으로 바꿔주고 sort()함수를 이용하여 큰 순서대로 배열을 해주면 된다. 중요한 점은 문자열에서 +연산자는 문자열을 이어 붙여주는 역할을 하지만 -연산자는 숫자처럼 계산이 된다. 또한 오름차순, 내림차순을 할 때에는 앞과 뒤 문자열을 이어 붙여서 큰 수를 뒤에 붙이는 식으로 연결을 하면 된다. 모든 수가 "0"이면 "0"을 return 하게끔 한다.

💡 필요 문법

sort(a,b) => a-b

sort()를 사용하게 된다면 내림차순은 b-a가 음수이면 a가 앞으로 오게끔 하고 오름차순은 a-b가 음수일 때 a가 앞으로 오게끔 하면 된다. 이 문제에서는 sort(a,b) => (b+a) - (a+b)로 해주면 된다.

💻 코드

function solution(numbers) {
    for(let i=0; i<numbers.length; i++){
        numbers[i] = String(numbers[i]);
    }
    numbers = numbers.sort((a,b) => (b+a) - (a+b));
    
    if(numbers[0] === "0") return "0"; // 모든 수가 "0"인 경우
    else return numbers.join('');
}
profile
블로그 이전했습니다

0개의 댓글