728x90
반응형
1. 문제
https://www.acmicpc.net/problem/15829
2. 풀이
NOTE - ans에서 곱할때 a와 r^i를 곱할때 int 범위를 벗어날 수 있으므로 long long int로 해주어야한다.
나머지 연산의 성질도 알고있으면 좋다..
- (A+B)%M = (A%M + B%M) % M
- (AXB)%M = (A%M X B%M) % M
- (A-B)%M = (A%M - B%M + M) % M ← 안 쪽에 + M을 해줘야 음수가 안 나오게 됨..
3. 코드
#include <iostream>
#include <string>
using namespace std;
int L;
string str;
long long int ans;
int toInt(char s) {
return s - 'a' + 1;
}
const int MOD = 1234567891;
// 15829
/*
NOTE - ans에서 곱할때 a와 r^i를 곱할때 int 범위를 벗어날 수 있으므로 long long int로 해주어야한다.
- 나머지 연산의 성질도 알고있으면 좋다..
- (A+B)%M = (A%M + B%M) % M
- (AXB)%M = (A%M X B%M) % M
- (A-B)%M = (A%M - B%M + M) % M → 이렇게 하면 음수가 안 나옴
*/
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
cin >> L >> str;
for(int i=0; i<L; i++) {
long long int a = toInt(str[i]);
long long int rI = 1;
for(int j=0; j<i; j++) rI = ((rI % MOD) * 31) % MOD;
ans += ((a % MOD) * (rI % MOD)) % MOD;
}
cout << ans % MOD;
return 0;
}
728x90
반응형
'💡 Problem Solving > Baekjoon' 카테고리의 다른 글
[백준 - 1931] 회의실 배정 [C++] (0) | 2023.10.17 |
---|---|
[백준 - 1541] 잃어버린 괄호 [C++] (0) | 2023.10.16 |
[백준 - 13335] 트럭 [C++] (0) | 2023.10.14 |
[백준 - 20040] 사이클 게임 [C++] (0) | 2023.10.13 |
[백준 - 23247] Ten [C++] (0) | 2023.10.13 |