🔗 문제 링크
https://www.hackerrank.com/challenges/big-sorting/problem?isFullScreen=true
Big Sorting | HackerRank
Sort an array of very long numeric strings.
www.hackerrank.com
✏️ 풀이
function bigSorting(unsorted) {
return unsorted.sort((a, b) => {
if (a.length === b.length) {
for (let i = 0; i < a.length; i++) {
if (a[i] === b[i]) {
continue;
}
return a[i] - b[i];
}
return 0;
}
return a.length - b.length;
});
}
문자열로 된 양의 정수를 정렬하는 문제다. 매우 큰 수도 입력으로 주어지지만 BigInt는 HackerRank 환경에서 사용할 수 없다. 따라서 단순 크기 비교만으로는 정렬을 할 수 없다.
먼저 문자열의 길이가 길면 무조건 더 큰 수이기 때문에 문자열의 길이를 기준으로 오름차순 정렬하고, 길이가 같은 경우에 한해서 각 자리 수를 앞에서부터 비교하여 오름차순 정렬하였다.
function bigSorting(unsorted) {
return unsorted.sort((a, b) => a.length === b.length ? a - b : a.length - b.length);
}
처음에 위와 같이 풀어서 Test Case 2를 통과하지 못하였는데, 그 이유는 a와 b의 길이가 같을 때 a - b 때문이다. 문자열 간의 뺄셈은 암묵적으로 Number로 변환하여 연산하는데, 이 때, a와 b가 너무 긴 문자열이면 Number가 나타낼 수 있는 수의 범위를 넘어가버리기 때문에 이렇게 풀 수 없다. HackerRank의 Node.js 환경에서 BigInt를 지원하지 않기 때문에 BigInt(a) - BigInt(b)도 쓸 수 없다.
'연습장 > HackerRank 문제풀이' 카테고리의 다른 글
[HackerRank - Easy] Ice Cream Parlor - JavaScript (0) | 2023.01.05 |
---|---|
[HackerRank - Easy] Weighted Uniform Strings - JavaScript (0) | 2023.01.03 |
[HackerRank - Easy] Two Characters - JavaScript (0) | 2023.01.03 |
[HackerRank - Easy] Super Reduced String - JavaScript (0) | 2023.01.03 |
[HackerRank - Easy] Flatland Space Stations - JavaScript (0) | 2023.01.01 |