현대오토에버 코딩테스트 대비 오랜만에 감을 살리려고 처음으로 소프티어에 있는 문제들을 풀어봤다 대체로 Lv3 정도의 난이도가 나온다고해서 나와있는 문제들은 한번 다 풀어보려고 한다.
문제들이 대체로 어렵진 않은 것 같은데 정확한 설명이 부족하고 2프로 아쉬운느낌..?
그래도 함정이 조금 있어서 잘 생각해봐야한다.
완전 탐색으로 풀려고 그냥 처음부터 반복문으로 단순히 하려다가 실패
단위가 굉장히 크기 떄문에 long long 자료형을 사용하고 분할정복으로 각 연산 단위를 줄여줘야한다. 전체적으로 계산량 자체는 많지 않기 때문에 재귀를 사용해도 적합한 문제였다.
#include<iostream>
#define mod 1000000007;
using namespace std
long long K, P, N;
long long calc(long long count){
if(count == 1)
return P;
long long result = calc(count/2);
result = result * result % mod;
if(count%2==1)
result = (result * P) % mod;
return result;
}
int main(int argc, char** argv)
{
cin >> K >> P >> N;
cout << (calc(N*10) * K) % mod;
return 0;
}
int, long long 같은 자료형의 범위를 확실하게 정리해서 c++ 코너에 정리해놔야겠다 문자열을 쓰려고도 했었다 헷갈린다 ㅎ