58. 프로그래머스(2단계) - 가장 큰 수

성훈·2021년 9월 15일
0

Algorithm

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

📌 풀이

풀이 👨‍💻

function solution(numbers) {
  numbers = numbers
    .map((e) => String(e))
    .sort((a, b) => (b + a) - (a + b))
    .join("");
  return !Number(numbers) ? "0" : numbers;
}

📌 리뷰

숫자를 문자로 바꾸고 붙힌 다음에 그 붙힌 수를 내림차순으로 정렬시켰다.
그리고 나서 배열을 문자열로 합쳤는데 마지막 케이스가 통과가 안되서 이리 저리 궁리해보니 0만 있는 경우를 신경을 안써줘서 그런거였다.

만약 인자 배열 numbers[0,0,0] 이라면 반환되어야 하는건 '0'이지만 실질적으로 '000'이 되어버린다.
그래서 그 경우의 수를 하나 집어주니 통과되었다.

📌 문제 출처

출처: 프로그래머스 코딩 테스트 연습,

https://programmers.co.kr/learn/challenges#

profile
어떻게 이걸 풀어낼 수 있을까

0개의 댓글