개발관련/매일 코딩 테스트 챌린지

[자바스크립트] 코딩테스트 큰 팩토리얼

개발자 Dane 2023. 7. 6. 19:51
반응형

구름 문제

문제 큰 팩토리얼

 

구름LEVEL

구름LEVEL 문제를 풀이하고 부족한 부분을 보완하며 실력을 키워보세요. 구름LEVEL은 코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입

level.goorm.io

진짜 짜증 나는 문제였습니다.

 

솔루션

1. for 문

// Run by Node.js
const readline = require('readline');

(async () => {
	let rl = readline.createInterface({ input: process.stdin });
	
	for await (const line of rl) {
		let result = BigInt(1)
		for(let i = line; i >= 1; i--){
			result *= BigInt(i);
		}
		result = result % BigInt(1000000007)
		console.log(result.toString())
		rl.close();
	}
	
	process.exit();
})();

2. 재귀 함수 

// Run by Node.js
const readline = require('readline');

(async () => {
	let rl = readline.createInterface({ input: process.stdin });
	
	function factorial(num){
		if(num > 1){
			return BigInt(num) * BigInt(factorial(num - 1))
		}
		return 1
	}
	
	for await (const line of rl) {
		let result = factorial(line)
		
		result = result % BigInt(1000000007)
		console.log(result.toString())
		rl.close();
	}
	
	process.exit();
})();

 

배운 점

자바스크립트 BinInt

 

BigInt는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체입니다.
BigInt는 정수 리터럴의 뒤에 n을 붙이거나(10n) 함수 BigInt()를 호출해 생성할 수 있습니다.

 

자바스크립트가 표현할 수 있는 최댓값

JavaScript의 Number 타입은 64비트 부동소수점 형식을 사용하며, 53비트가 유효한 정수 표현 범위입니다. 따라서 2^53 - 1은 JavaScript에서 정확하게 표현할 수 있는 가장 큰 정수값입니다.

 

2의 53 제곱을 10진수로 읽으면 "9,007,199,254,740,992"입니다.

읽으면 "구십조칠천백구십구억이천오백사십칠만사천구백구십일"입니다.

 

 

 

p.s 90조 보다 큰 값을 다룰 수도 있겠..ㅈ?

p.s1 요즘 메모리 값도 싼데 그냥 좀 늘리면 안 될까..

반응형