문제 링크 :
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곱하고 마지막에 나머지 구하는거나 수학적으로 결과는 같다.
'프로그래밍 > 알고리즘' 카테고리의 다른 글
Softeer-연습문제-징검다리(C++) (0) | 2021.06.30 |
---|---|
Softeer-연습문제-수퍼바이러스(C++) (0) | 2021.06.29 |
Softeer-연습문제-복잡한 조립라인2(C++) (0) | 2021.03.30 |
Softeer-연습문제-복잡한 조립라인1(C++) (0) | 2021.03.29 |
Softeer-연습문제-조립 라인(C++) (0) | 2021.03.28 |