※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 15829번 문제인 Hashing이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/15829
15829번: Hashing
APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정
www.acmicpc.net
p=31, MOD=1234567891인 롤링 해시(rolling hash)를 구현하는 문제이다.
지문에 써져있는 설명을 읽고 그대로 따라 구현해 문제를 해결해주자.
(A+B)%C와 ((A%C)+(B%C))%C의 값은 동일하다는 성질을 이용해 정수의 오버플로우를 피할 수 있다.
첫 번째 문자의 인덱스가 0임에 유의해 구현하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
int L;
string s;
ll exp31 = 1;
ll ans = 0;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> L >> s;
for (int i = 0; i < L; i++) {
ans = (ans + exp31 * (s[i] - 'a' + 1)) % 1234567891;
exp31 = (exp31 * 31) % 1234567891;
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 15821 // C++] 낚이고 낚아라 (0) | 2023.01.13 |
---|---|
[BOJ 15830 // C++] 싱크홀 (0) | 2023.01.13 |
[BOJ 6604 // C++] Matrix Chain Multiplication (0) | 2023.01.13 |
[BOJ 15818 // C++] 오버플로우와 모듈러 (0) | 2023.01.13 |
[BOJ 15820 // C++] 맞았는데 왜 틀리죠? (0) | 2023.01.13 |