배워서 남주는 개발자 :)

Algorithm

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

핏짜보이 2022. 7. 19. 19:36
반응형

문제

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

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

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

 

제한 사항

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

입출력 예

numbers			  	return
[6, 10, 2]		         6210
[3, 30, 34, 5, 9]		9534330

 

처음 작성한 코드

->처음에는 배열에 들어있는 숫자의 앞자리를 일일히 비교해서 새로운 배열에 넣고 정렬을 해주려고 했다...

//앞자리로 비교해서 위치 선정 -> 10보다 크면 1의 자리 비교해서 위치 선청
//앞자리로 비교하고 실제로 배치할때에는 전체 숫자로 해야함!

function solution(numbers) {
  let answer = 0;
  let newArr = [];
  let overTen = 0;
  for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] < 10) {
      newArr.push(numbers[i]);
      newArr.sort((a, b) => b - a);
    } else {
      overTen = numbers[i] / 10;
      newArr.push(overTen);
      newArr.sort((a, b) => b - a);
    }
    console.log(newArr);
  }
  return answer;
}

 

최종 코드

-> 해당 배열의 원소를 바로 문자로 바꿔서/ 두개씩 붙여서 비교를 해서 배열에서 정렬을 해주고/ 정렬된 배열을 문자로 바꾸면 된다!

function solution(numbers) {
  let answer = numbers
    .map((v) => v + "") //각각의 숫자를 문자로 변환
    .sort((a, b) => b + a - (a + b)) //문자로 변환된 숫자를 연결하여 배열에서 비교 정렬(내림차순)
    .join(""); //배열에서 정렬된 숫자를 다시 문자로 변환
  return answer[0] === "0" ? "0" : answer; //numbers 배열이 0으로만 구성되어있을 때 '0'만 출력
}

 

배운점

더 직관적으로 작성할 수 있는 코드를 연습하자!

728x90