프로그래밍/알고리즘

Softeer-연습문제-바이러스(C++)

Sechan Oh 2021. 3. 30. 01:53

문제 링크 : 

https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=407

 

문제 개요 : 

N초 후에 바이러스 수 구하기

 

#include<iostream>

using namespace std;

int main(int argc, char** argv)
{
        unsigned long long K,P,N; // 큰 수를 다루므로 큰 자료형 사용하기
        cin >> K >> P >> N;
        for (int i=0;i<N;i++){
                K *= P; // 1초마다 P배
                K %= 1000000007; // 나머지 구하기
        }
        cout << K;

 return 0;
}

 

주의해야 할 요소들

1) 큰 수를 다뤄야 하므로 마음 편하게 가장 큰 자료형인 unsigned long long 을 사용한다.

2) N초후에 바이러스를 구하고 1000000007으로 나누려 하면 숫자가 너무 커지므로 오버플로우가 예상된다. 따라서 P를 곱해줄 때마다 나머지를 구해준다.

3) 나머지 구하고 P곱해서 다시 나머지 구하는거나 P곱하고 마지막에 나머지 구하는거나 수학적으로 결과는 같다.