빵 입니다.

[Softeer] 바이러스 본문

알고리즘과 자료구조/알고리즘

[Softeer] 바이러스

bread-gee 2023. 8. 2. 22:00

문제 설명

바이러스가 숙주의 몸속에서 1초당 P배씩 증가한다.

처음에 바이러스 K마리가 있었다면 N초 후에는 총 몇 마리의 바이러스로 불어날까? N초 동안 죽는 바이러스는 없다고 가정한다.


제한 사항

  • 1 ≤ K ≤ 108인 정수
  • 1 ≤ P ≤ 108인 정수
  • 1 ≤ N ≤ 106인 정수

입출력 예

[입력]

첫 번째 줄에 처음 바이러스의 수 K, 증가율 P, 총 시간 N(초)이 주어진다.

 

[입력 예시]

2 3 2

 

[출력]

최종 바이러스 개수를 1000000007로 나눈 나머지를 출력하라.

 

[출력 예시]

18

 


나의 풀이

const rl = require('readline').createInterface({
	input: process.stdin,
	output: process.stdout
});

rl.on('line', (line) => {
	let input = line.split(' ').map(Number);
	
	let K = BigInt(input[0]);
	const P = input[1];
	const N = input[2];

	for( let i = 1; i <= N; i++) {
		K *= BigInt(P);
		K %= BigInt(1000000007);
	}

	console.log(Number(K));
}).on('close', () => {
	process.exit();
});

알게된 점

  • readline 모듈 사용법을 더 자세히 알게 되었다.
    알고리즘 작성 시 fs 모듈만 사용해서 작성했었는데, 사이트에서 readline 모듈을 권장하길래 readline 모듈을 사용해 보았다.
  • BigInt 자료형
    존재 여부는 알았지만 처음 사용해 본다.
    알고리즘 작성을 처음 시도했을 때, BigInt는 사용하지 않았다.
    출력이 모두 맞는데 통과하지 못했다.
    여러 검색을 통해 자료형 문제라는 것을 알았다.
    나의 출력값을 고려하지 않은 사항이었다. 중요한 건 제약 사항에 다 나와있는 건데 간과했다.ㅠㅠ
    "BigInt 는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체입니다."

* 자료형 문제라는 것을 알려주신 분의 댓글

최종 바이러스를 담는 변수(K)는 Number 타입인데, Number 타입은 최대 9x10^15까지 저장할 수 있습니다.
증가율(P)를 곱하기 전의 K는 최대 10^9까지의 값을 가질 수 있고, P는 최대 10^8이므로 P를 곱할 때 overflow가 발생할 수 있습니다.

[MDN BigInt]

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/BigInt

반응형
Comments