모듈러 연산의 성질을 이용한 문제다.
(a * b ) mod n == (a mod n) * (b mod n)
#include <bits/stdc++.h>
using namespace std;
long long MOD = 1234567891;
long long MUL = 31;
int L;
string input;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> L >> input;
long long answer = 0; // 합 누적
long long R = 1; // 제곱근 처음에 1로 시작
for(int i = 0; i < L; i++){
// input[i] - 'a' + 1 : 문자의 인덱스. a는 1이 나오도록.
long long idx = input[i] - 'a' + 1;
answer = (answer + (idx * R)) % MOD;
R = (R * MUL) % MOD; // 곱할 숫자
}
// 마지막에 항상 % MOD를 해서 숫자가 커지는 것을 방지한다
cout << answer;
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
괄호 백준 9012번 c++ (0) | 2022.02.13 |
---|---|
좋은 단어 백준 3986번 c++ (두번째 풀기) (0) | 2022.02.11 |
시리얼 번호 백준 1431번 c++ (0) | 2022.02.10 |
곱셈 백준 1629번 c++ (0) | 2022.02.09 |
큰 수 A+B 백준 10757번 c++ (0) | 2022.02.09 |