일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Algorithms
- Developer_JoyKim
- for문
- 최강의 인생
- join
- select
- 코딩테스트
- node.js
- JavaScript
- 정규표현식
- 개발자_조이킴
- 코드스테이츠
- Programmers
- 알고리즘
- SQL
- Where
- 프로그래머스
- 역행자
- 배열
- 코플릿
- MySQL
- 코딩공부
- array.slice()
- 자바스크립트
- Hackerrank
- 개발자의 책장
- array
- array.push()
- 재귀함수
- 블록체인
- Today
- Total
CodingSpace
[HackerRank/Algorithms] Sorting - Big Sorting 본문
Problem. Sorting - Big Sorting
Link.
https://www.hackerrank.com/challenges/big-sorting/problem?isFullScreen=true
Big Sorting | HackerRank
Sort an array of very long numeric strings.
www.hackerrank.com
Description.
Consider an array of numeric strings where each string is a positive number with anywhere from 1 to 10^6 digits. Sort the array's elements in non-decreasing, or ascending order of their integer values and return the sorted array.
Key Point.
자바스크립트의 Number 타입은 정수를 나타낼 수 있는 값이 한정적임
(Number 타입으로 표현할 수 있는 최대값은 1.8E308이며 그 보다 큰 값은 특별한 Number 상수인 "Infinity"으로 대체됨)
따라서 1.8E308를 초과하는 수를 Number 타입으로 표현할 경우 문제가 발생할 수 있음!
이를 해결하기 위한 한 가지 방법은 BigInt 메소드 사용해서 수를 표현하는 방법.
본 문제에서도 무턱대고 아래와 같이 코드를 작성하면 test case#2와 #6를 통과하지 못함.
function bigSorting(unsorted) {
let sorted = unsorted.sort((a, b) => {
return a - b
});
return sorted;
}
그 이유는 배열 요소중 1.8E308를 초과하는 요소가 있었기 때문!
위의 코드를 아래와 같이 BigInt 메소드를 적용한 코드로 수정하였더니,
모든 test case를 통과할 수 있었음.
function bigSorting(unsorted) {
let sorted = unsorted.sort((a, b) => {
return Number(BigInt(a) - BigInt(b))}
});
return sorted;
}
자바스크립트에서 아주 큰 수를 다룰때 타입 사용에 주의해야겠음!!!
My Answer.
'use strict';
const fs = require('fs');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', function(inputStdin) {
inputString += inputStdin;
});
process.stdin.on('end', function() {
inputString = inputString.split('\n');
main();
});
function readLine() {
return inputString[currentLine++];
}
/*
* Complete the 'bigSorting' function below.
*
* The function is expected to return a STRING_ARRAY.
* The function accepts STRING_ARRAY unsorted as parameter.
*/
function bigSorting(unsorted) {
let sorted = unsorted.sort((a, b) => {
return Number(BigInt(a) - BigInt(b))}
);
return sorted;
}
function main() {
const ws = fs.createWriteStream(process.env.OUTPUT_PATH);
const n = parseInt(readLine().trim(), 10);
let unsorted = [];
for (let i = 0; i < n; i++) {
const unsortedItem = readLine();
unsorted.push(unsortedItem);
}
const result = bigSorting(unsorted);
ws.write(result.join('\n') + '\n');
ws.end();
}
References.
자바스크립트에서 아주 큰 수 다루기 (BigInt):
자바스크립트에서 아주 큰 수 다루기 (BigInt)
자바스크립트로 알고리즘 문제를 풀다가 난관에 봉착했다. 문제에서 주어진 값의 범위는 2^62 이하로 아주 큰 정수였다. 자바스크립트의 Number 타입은 정수를 안정적으로 나타낼 수 있는 값이 한
velog.io
Number (MDN):
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number
Number - JavaScript | MDN
Number 생성자는 숫자를 다루기 위해 상수와 메소드를 가지고 있습니다. 다른 타입의 값은 Number() 함수를 사용하여 숫자로 바꿀 수 있습니다.
developer.mozilla.org
'HackerRank > Algorithm' 카테고리의 다른 글
[HackerRank/Algorithms] Search - Ice Cream Parlor (0) | 2022.09.11 |
---|---|
[HackerRank/Algorithms] Implementation - Equalize the Array (0) | 2022.09.08 |
[HackerRank/Algorithms] Strings - CamelCase (0) | 2022.09.06 |
[HackerRank/Algorithms] Implementation - Cut the sticks (0) | 2022.09.04 |
[HackerRank/Algorithms] Warmup - Compare the Triplets (0) | 2022.09.03 |