Problem Solving/BOJ

[백준 15829번] [Mod] Hashing

  • -
728x90
반응형

문제는 되게 쉬운 편이고, 시키는 대로 계산하기만 하면 되는데 Large의 경우에는 매우 숫자가 기하급수적으로 커지므로 pow함수를 이용하여 한번에 계산하기 보다는 그때그때 나머지를 연산하여 최대한 숫자를 줄이면서 계산해야 한다.

 

이 점만 유의하면 매우 쉬운 문제이다.

 

위의 내용을 바탕으로 코드를 구현하면 다음과 같다.

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <cmath>

using namespace std;
typedef long long ll;

int main(void){
    int n;
    cin >> n;
    
    string data;
    cin >> data;

    int r = 31;
    int M = 1234567891;

    ll hash = 0; 

    for(int i = 0; i < n; i++){
        int temp = data[i] - 'a' + 1;
        ll save = temp;
        for(int j = 1 ; j <= i; j++){
            save *= r;
            save %= M;
        }
        hash += save;
    }

    cout << hash % M << "\n";
    return 0;
}

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.