본문 바로가기

백준/JavaScript

[JS] 백준 24266번 - 알고리즘의 수행 시간 5

728x90

 

 

문제 24266번

https://www.acmicpc.net/problem/24266

 

24266번: 알고리즘 수업 - 알고리즘의 수행 시간 5

오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시

www.acmicpc.net

 

이번에는 MenOfPassion 알고리즘에 for문이 3개이다. 각 범위는 1에서부터 n까지이다.

그러므로 수행 횟수는 n*n*n 즉, n**3이고, for문이 3개이므로 최고차항의 차수는 3이다.

...

라고 했는데

 

음... 아무리봐도 맞는데?? 하는 생각에 다른 분의 풀이를 찾아보니

JavaScript로 표현할 수 있는 Number의 범위가 -2^53+1에서 2^53-1(9,007,199,254,740,991)까지인데 문제 입력의 최대 범위는 이를 초과하는 값을 가지게 된다고 한다. 따라서 Number 대신 그 범위를 넘는 숫자를 사용할 수 있게 해주는 BigInt를 사용해야 한다. 여기서 BigInt를 그냥 사용할 경우 뒤에 n이 붙어서 나오기 때문에 이를 문자열로 다시 변경해줘야 숫자값을 출력할 수 있다고 한다.

[출처] https://minjo0n.tistory.com/12

 

 

코드를 수정해보면

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim();

let n = BigInt(input);
console.log(`${n*n*n}`)
console.log(3)

 

 

 

 

 

 

다른 분은 후에 n이 붙으면 replace()를 통해 제거해주신 분도 있어서 그 풀이처럼 풀어도 봤다.

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim();

let N = BigInt(input);
let n = N*N*N;
n = n.toString().replace('n','');  //n을 제거

console.log(n)
console.log(3)

 

 

[참고] https://dnd0707.tistory.com/14
728x90