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

Teasan·2022년 7월 2일
0

Algorythm

목록 보기
11/17
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 합니다.

입출력 예

numbersreturn
[6, 10, 2]"6210"
[3, 30, 34, 5, 9]"9534330"

수도 코드

function solution(numbers) {
    let answer = '';
    let sum = [];
    
    for(let x of numbers) {
      // 각 배열의 요소를 string으로 변환해서 sum 배열에 넣어둠
        sum.push(String(x)); 
    }
    
	// string 변환 배열 sum을 sort를 오름차순으로 정렬해서 합침.
    let max = sum.sort((a, b) => (b+a)-(a+b)).join("");

	// 반환
    answer = max
    return answer == 0 ? "0" : answer
}

풀이 코드

function solution(numbers) {
  let answer = "";
  let sum = [];

  for (let x of numbers) {
    sum.push(String(x));
  }

  let max = sum.sort((a, b) => b + a - (a + b)).join("");

  answer = max;
  return answer == 0 ? "0" : answer;
}

테스트

테스트 1통과 (116.36ms, 44.9MB)
테스트 2통과 (64.90ms, 37.7MB)
테스트 3통과 (178.24ms, 47.2MB)
테스트 4통과 (3.98ms, 32.4MB)
테스트 5통과 (128.49ms, 43.9MB)
테스트 6통과 (117.52ms, 43.7MB)
테스트 7통과 (0.11ms, 30MB)
테스트 8통과 (0.09ms, 29.9MB)
테스트 9통과 (0.11ms, 30MB)
테스트 10통과 (0.12ms, 29.9MB)
테스트 11통과 (0.11ms, 30MB)
테스트 12통과 (0.12ms, 30MB)
테스트 13통과 (0.10ms, 30.3MB)
테스트 14통과 (0.10ms, 30MB)
테스트 15통과 (0.07ms, 30MB)

테스트 실패 사항과 해결 방법

  • 테스트 11 번이 통과가 되지 않아서, 여러 번 시도를 해봤는데 답을 못 찾았다. 결국 검색을 통해서 알게 된 것은 answer가 0이었을 경우를 처리해주지 않아서 통과가 되지 않았던 것이다.
answer = max
return answer == 0 ? "0" : answer;
  • 이 부분을 처리해주기 위해 answer == 0`일 경우에 "0"으로 할당해주고, 아니면 그대로 answer를 반환해주도록 했다.

🗂 Resource



⚡️ Reference


✍🏻 programmers 문제 출처 - 가장 큰 수


profile
일단 공부가 '적성'에 맞는 개발자. 근성있습니다.

0개의 댓글