아래 링크를 클릭해 새로운 블로그에서 더 많은 글을 만나보세요.
👉
이전 블로그 바로 가기
[Programmers] 42746/가장 큰 수/javascript
💡 문제 설명
프로그래머스라 문제 설명은 링크로 대체
📥 입력
numbers |
---|
[6, 10, 2] |
[3, 30, 34, 5, 9] |
📤 출력
result |
---|
“6210” |
“9534330” |
📏 제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
📥 예제 입력
[6, 10, 2]
📤 예제 출력
6102
💡 풀이
✍️ 풀이과정
js 좋은 점이 문자열도 크기 비교가 가능하다는 점이다. a+b와 b+a를 단순 마이너스 연산을 해도 된다. 그런데 혹여나 다른 문자가 들어오면 NaN이 나오니까 안전하게 부등호 쓰긴함.
📖내가 작성한 JS Code
function solution(numbers) {
return numbers.reduce((acc,cur)=>acc+cur,0) === 0? '0': numbers.map(String).sort((a,b)=>(b+a > a+b? 1:-1)).join('')
}
🧠 코드 리뷰
요약
- 정확성: 정렬 기준
(b+a)
vs(a+b)
사용으로 정답. 전부 0 처리도 OK. - 복잡도: O(n log n · k). k는 자릿수(≤4)로 상수 취급.
- 개선: 비교 함수 가독성, 0 처리 방식(정렬 후 첫 원소 체크) 권장.
가독성 버전
function solution(numbers) {
const arr = numbers.map(String).sort((a, b) => (b + a).localeCompare(a + b));
return arr[0] === '0' ? '0' : arr.join('');
}
코멘트
- 정렬 비교는
localeCompare
로 -1/0/1을 명확히 반환해 의도가 드러납니다. - 모든 원소가 0인 경우는 정렬 후 첫 원소가 ‘0’인지로 처리하면 한 번에 해결됩니다.
💻결과
⚡ Javascript
댓글남기기