백준 알고리즘/Lang-node.js
[백준/node.js] 4150번 피보나치 수
Jongung
2022. 4. 12. 16:21
https://www.acmicpc.net/problem/2455
2455번: 지능형 기차
최근에 개발된 지능형 기차가 1번역(출발역)부터 4번역(종착역)까지 4개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다.
www.acmicpc.net
- 사용언어 : node.js
- 알고리즘 : 임의 정밀도 / 큰 수 연산
- Solved.ac Tier : Silver V
node.js 코드
1. 문제 정리
피보나치 수열이란 그 전 두 항의 합으로 계산되는 수열을 뜻한다.
다음과 같이 1 - > 1 - > 2 - > 3 - > 5 - > 8 - > 13같이 그 전 두 항의 합으로 계산되는 수열을 피보나치 수열이라고 한다는 것 이다.
예제 출력만 해도 354224848179261915075라는 어마어마하게 큰 수가 나오기 때문에 JS에서도 제대로 표현 할 수 없는 수의 단위임을 알기에 BigInt()를 사용 해서 큰 수 연산을 해주었다.
let fibonacci = [0, 1, 1]
for(let i = 3; i <= input; i++){
fibonacci.push(BigInt(fibonacci[i-1]) + BigInt(fibonacci[i-2]))
}
console.log(BigInt(fibonacci[input]).toString())
BigInt는 값 마지막에 n이 붙기 때문에 toString 메서드를 사용 해 주어야 원하는 값이 출력 될 수 있다는 것을 명심해야 한다.
2. 완성 코드
const filePath = process.platform === 'linux' ? '/dev/stdin' : '../ans.txt';
let input = require('fs').readFileSync(filePath).toString().trim().split("\n").map((e)=>+e);
let fibonacci = [0, 1, 1]
for(let i = 3; i <= input; i++){
fibonacci.push(BigInt(fibonacci[i-1]) + BigInt(fibonacci[i-2]))
}
console.log(BigInt(fibonacci[input]).toString())

질문또는 코드 리뷰는 댓글로 부탁드립니다!