티스토리 뷰

320x100

2021년 2월 15일에 Velog에 작성한 글을 옮겨온 글입니다.

 

프로그래머스 - 가장 큰 수

풀이

function solution(numbers) {
    const answer = numbers.sort((a, b) => (('' + b + a) - ('' + a + b)));
    return answer.every(cur => !cur) ? '0' : answer.join('');
}

처음 문제를 딱 봤을 때는 numbers.sort().reverse().join('')을 생각했는데, 이 로직은 예제처럼 [30, 3]이 있을 때, '330'이 아닌 '303'을 리턴하게 됩니다.

문제를 찬찬히 다시 읽어보니 "정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내라."라고 합니다. 그래서 두 숫자를 문자열로 형변환('')하여 이어붙였을 때, 더 큰 수가 나오는 순서로 정렬했습니다. 이 이어 붙여서 정렬하는 아이디어를 떠올리기까지가 어려웠어서 기록으로 남겨둡니다.

 

테스트 케이스 11번은 케이스를 도저히 모르겠어서 '질문하기'를 참고했습니다. 모든 숫자가 0일 경우([0, 0, 0])에 대한 방어 로직을 추가했는데요. 이 부분을 answer.every(cur => !cur)에서 !answer[0]으로 바꾸면 시간 효율이 좀 더 좋아집니다.

320x100
댓글