[소프티어] 바이러스 (C++)

우리누리·2023년 11월 2일

👓 문제 설명


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

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

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


💣 제한 사항

  • 1 ≤ K ≤ 108인 정수

  • 1 ≤ P ≤ 108인 정수

  • 1 ≤ N ≤ 106인 정수


🚨 접근 방법

습관처럼 int 형식으로 데이터를 입력받으면 오버플로우가 발생한다. (데이터 형식 한계 초과)
식을 구해보면 k = k * p이며, 이를 1000000007나눈 나머지를 출력해야한다.
결국 어떠한 값으로 나눈 나머지를 출력하는 조건이라면
도중에 구하는 값에서 mod 연산을 해주어도 결과는 같다.
따라서 식에서 mod연산을 같이 해주어 오버플로우를 같이 방지해주었다.


🚈 풀이

#include<iostream>
#define max 1000000007

using namespace std;

int main(int argc, char** argv)
{
  // 바이러스의 수 k, 초당 증가율 p, 총 시간 n
  // 최대 100000000
  unsigned long long k,p,n,answer=0;
  cin>>k>>p>>n;
  for(int i=0;i<n;i++){
    k*=(p%max);
    k%=max;
  }
  answer=k;
  cout<<answer;
   return 0;
}

0개의 댓글