[코딩 테스트] javaScript #19

안광의·2021년 8월 8일
0

코딩 테스트

목록 보기
19/38
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"

[출처] 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/42746)


function solution(numbers) {
    let answer = numbers.map(el => el + "").sort((a,b) => (b+a) - (a+b)).join('')
    return answer[0]==='0'? '0' : answer;
}

실패한 코드

function solution(numbers) {
    return numbers.sort().reverse().join('')
}

처음에 봤을때는 간단한 문제라고 생각하고 아래처럼 코드를 작성했는데 잘못되었다는걸 깨달은 후, 제대로 된 코드를 떠올리기까지 꽤 시간이 걸렸던 문제였다. 가장 큰 수를 만들기 위해서는 단순히 sort된 배열을 뒤집어서 합치는 것이 아니라 자릿 수가 다른 숫자들 때문에 합쳐졌을때를 비교하여 정렬시켜줘야 한다. 그 후 테스트 코드를 확인했을때 하나가 통과가 안되서 코드를 잘못 짠게 아닌가 고민했는데 배열내의 모든 요소가 0일때는 '0000...'이 아니라 '0'만 리턴해줘야 하기 때문에 리턴부분을 삼항연산으로 수정하여 모든 테스트에 통과하였다.

profile
개발자로 성장하기

0개의 댓글