본문 바로가기
Algorithm/Baekjoon

백준 24266번

by minhi 2025. 2. 1.

백준 24266번을 풀어보았다.

 

처음에는 동일한 유형인 24262번~24265번과 유사할 거라 생각하여 큰 고민 없이 풀이하였다.

let n = Number(require('fs').readFileSync('/dev/stdin').toString())
 
console.log(n**3)
console.log(3)

 

당연히 정답일 줄 알았는데 틀렸습니다가 출력되었다.

 

알고보니 1≤n ≤500,000의 범위에서 n^2까지는 number 자료형이 표현할 수 있지만

 

n^3은 number 자료형이 표현할 수 있는 범위를 넘어서는 것이었다.

 

JavaScript에서 자주 사용되는 숫자 자료형으로는 number와 bigint가 있다.

 

number

 

JavaScript의 기본적인 숫자 자료형으로 정수와 부동소수점을 모두 포함한다.

 

-(2^53-1)~2^53-1의 범위를 표현할 수 있다.

 

bigint

 

number의 안전한 범위를 초과하는 정수를 표현할 수 있도록 ES11에서 도입된 숫자 자료형으로 정수만 포함한다.

 

숫자 뒤에 n을 붙이거나 BigInt() 생성자를 사용해 선언할 수 있으며

 

표현 가능 범위가 정해져있지 않고 메모리가 허용하는 한도 내에서 매우 큰 숫자를 저장할 수 있다.

 

 

정리하면 일반적인 경우 number로도 충분하지만 아주 큰 정수 연산이 필요할 경우 bigint를 사용해야 한다.

 

즉, 최대 500,000의 세제곱까지 연산해야 하는 이 문제의 경우 n을 number가 아닌 bigint로 선언해야 하고

 

bigint와 number는 함께 연산할 수 없으므로 n**3은 n**3n으로 연산 후* 다음의 방법으로 변환 후 출력하도록 한다.

  • (n**3n).toString()
  • `${n**3n}`
  • n**3n + ''
  • String(n**3n)
let n = BigInt(require('fs').readFileSync('/dev/stdin').toString())
 
console.log((n**3n).toString())
console.log(3)

 

* 이때 n은 bigint, 3은 number, 3n은 bigint 자료형이다.

 

💫 이 문제를 통해 배운 것

• 일반적인 경우 및 소수점 연산이 필요한 경우 number를, 아주 큰 정수 연산이 필요한 경우 bigint를 사용해야 한다.
• bigint와 number는 함께 연산할 수 없다.
• bigint를 n 없이 출력하는 방법으로는 toString(), 템플릿 리터럴이 가장 일반적이다.

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 1157번  (0) 2025.01.23
백준 11653번  (0) 2025.01.22
백준 2581번  (0) 2025.01.20
백준 1978번  (0) 2025.01.17
백준 9506번  (0) 2025.01.17