[c/c++] Softeer 수퍼바이러스 Lv3

한우진·2023년 11월 2일
0

알고리즘_Softeer

목록 보기
1/1

현대오토에버 코딩테스트 대비 오랜만에 감을 살리려고 처음으로 소프티어에 있는 문제들을 풀어봤다 대체로 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++ 코너에 정리해놔야겠다 문자열을 쓰려고도 했었다 헷갈린다 ㅎ

0개의 댓글