본문 바로가기
Programming Solve/BOJ

BOJ 15829 - Hashing / C++

by msm1029 2022. 4. 14.
반응형

문제 링크 : https://www.acmicpc.net/problem/15829

 

15829번: Hashing

APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정

www.acmicpc.net

 

 

풀이

해당 수식을 계산하는 과정에서 31^49와 같은 매우 큰 수를 계산하게 되므로 C++의 pow를 사용하면 오버플로우가 발생한다.

따라서 직접 pow 함수를 구현하며 계산 과정에서 modulo 연산을 수행해준다.

나머지는 단순 수식 구현이므로 생략한다.

 

 

코드

#include <iostream>
#include <string>
using namespace std;

#define ull unsigned long long

ull pow(int a, int b) {
    ull ret = 1;
    for(int i=0; i<b; i++){
        ret *= a;
        ret %= 1234567891;
    }

    return ret;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);

    int n;
    string str;
    cin >> n >> str;

    ull ans = 0;

    for(int i=0; i<n; i++){
        ans += (int(str[i]-'a' + 1) * pow(31, i));
        ans %= 1234567891;
    }

    cout << ans;
}
반응형