(1).백준 13075번 Fibonacci Sequence는 피보나치 n번째 값 테스트케이스 천여개를 제공하고

최대 2의 48승 값까지 해당하는 수치를 출력해야 하는 문제였는데

이전에 행렬을 통해서 피보나치 처리하는 것을 1년도 넘게 전에 해봤기 때문에 

해당 방식의 결과 출력에서 조건처리에 해당하는 부분 수정과

n개의 테스트케이스 처리를 위한 for문처리만 해서 간단하게 해결할 수 있었다.

const input = `11
1
2
8
20
46
60
3749999998
3749999999
3750000000
3750000001
281474976710656`.split('\n').map(BigInt)
const result = []

function cal(a,b) {
    return[ [(a[0][0]*b[0][0] + a[0][1]*b[1][0])%1000000000n , (a[0][0]*b[0][1] + a[0][1]*b[1][1])%1000000000n] ,
            [(a[1][0]*b[0][0] + a[1][1]*b[1][0])%1000000000n , (a[1][0]*b[0][1] + a[1][1]*b[1][1])%1000000000n]]
          
}
let one = [[1n,1n],[1n,0n]]
// let now = input

function recultion(arr,n){
    if(n === 1n){
        return arr
    }

    if(n%2n){
        return cal(arr , recultion(cal(arr,arr),(n-1n)/2n))
    }
    else{
        return recultion(cal(arr,arr) , n/2n)
    }
}

for(let i = 1 ; i < input.length ; i++){
    result.push(String(recultion(one,input[i])[0][1]))
}

console.log(result.join('\n'))

'회고' 카테고리의 다른 글

[개발일지] - 269(연차)  (0) 2024.03.25
[개발일지] - 268(주말)  (0) 2024.03.24
[개발일지] - 266(연차)  (0) 2024.03.22
[개발일지] - 265(연차)  (0) 2024.03.21
[개발일지] - 264  (0) 2024.03.20

+ Recent posts