[BaekJoon 15829][๐ค2] Hashing
โ ๋ฌธ์
๐ฏ ๋์ด๋
Bronze ๐ค2
๐ง ํ์ด
1. ๋ด ํ์ด (ํด์ฑ)
- ์๊ณ ๋ฆฌ์ฆ
string,Hashing
- ์ค๋ช
์๋ฃํ๊ณผ Modular ์ฐ์ฐ์ ์ ์๊ฐํด๊ฐ๋ฉฐ ํ์ด์ผ ํ๋ ๋ฌธ์ ์ด๋ค.
๊ฐ๋จํด ๋ณด์ด์ง๋ง ์์ธ๋ก ํ๋๋ง ์๋ชป ์จ๋ ๋ถ๋ถ ์ ์ ๋ฐ์ ์ป์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. ํนํ๋ ๊ณฑํด์ง๋ ๊ฐ์ด 31์ ๊ฑฐ๋ญ์ ๊ณฑ์ผ๋ก ๊ณ์ํด์ ๋ํด์ง๊ธฐ ๋๋ฌธ์, ์์๊ฐ์ long long์ ๋ฒ์๋ฅผ ๋์ผ๋ฏ๋ก, '์๋ฃํ'๊ณผ 'Modular ์ฐ์ฐ'์ ํน์ง์ ์ ์๊ฐํด์ ํ์ด์ผ ์์ ํ ํต๊ณผํ ์ ์๋ค.
- ์ฝ๋
๋ด ํ์ด ์ฝ๋
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
constexpr int iR{ 31 };
constexpr int iM{ 1234567891 };
int iL{};
string strInput{};
cin >> iL >> strInput;
// int ๋ฒ์๋ฅผ ๋์ ์ ์์ผ๋ฏ๋ก long long ์๋ฃํ ์ฌ์ฉ
long long iSum{};
long long iPower{ 1 };
for(int i = 0; i < iL; ++i)
{
long long llVal{ strInput[i] - 'a' + 1};
// llVal <= 26, iPower < iM ์ด๋ฏ๋ก long long์ ๋ฒ์๋ฅผ ๋์ง ์๋๋ค
// ๋ฐ๋ผ์ ๋๋จธ์ง ์ฐ์ฐ์ ๋ถ๋ฐฐ ๋ฒ์น์ ์ ์จ๋ ๋จ
iSum = (iSum + llVal * iPower) % iM;
iPower = (iPower * iR) % iM;
}
cout << iSum;
return 0;
}
๐ญ ํ๊ธฐ
์ฌ์ ๋ณด์ด์ง๋ง ์๊ฐ๋ณด๋ค ์๋ฃํ์ ๋ฒ์์ Modular ์ฐ์ฐ์ ๋ํด ์ ๋๋ก ํ์
ํ์ง ์์ผ๋ฉด ๋ถ๋ถ ์ ์๋ง ๊ณ์ ๋ง๊ฒ ๋๋ค. ๋ ๋ํ ๊ทธ๋ฌ๋ค. ๊ธฐ๋ณธ์ ์ธ ์ง์์ ์ ๋๋ก ์์๋์.
Comments