백준 알고리즘/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())

 

제출 현황

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