해쉬함수란?
: 하나의 문자열을 보다 빨리 찾을 수 있도록 주소에 직접 접근할 수 있는 짧은 길이의 값이나 키로 변환하는 알고리듬을 수식으로 표현한 것.
즉, 해싱 함수(hashing function) h(k)는 어떤 키 k에 대한 테이블 주소(table address)를 계산하기 위한 방법으로 주어진 키 값으로부터 레코드가 저장되어 있는 주소를 산출해 낼 수 있는 수식을 말한다.
[네이버 지식백과] 해시 함수 [hash function, -函數] (IT용어사전, 한국정보통신기술협회)
처음에 아무리 해도 50점만 맞았다고 한 코드
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
const int M = 1234567891;
int main()
{
//freopen("test.txt", "r", stdin);
int L;
cin >> L;
char temp;
long long sum = 0;
long long r = 1;
for (int i = 0; i < L; i++)
{
cin >> temp;
sum += ((temp - 'a' + 1) * r) % M;
r = (r * 31) % M;
}
cout << sum;
return 0;
}
왜 50점만 맞았을까 여기저기 써치하다가 바꾼코드
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
const int M = 1234567891;
int main()
{
//freopen("test.txt", "r", stdin);
int L;
cin >> L;
char temp;
long long sum = 0;
long long r = 1;
for (int i = 0; i < L; i++)
{
cin >> temp;
sum = (sum + (temp - 'a' + 1) * r) % M;
r = (r * 31) % M;
}
cout << sum;
return 0;
}
sum = (sum + (temp - 'a' + 1) * r) % M;
이 부분이 틀린거였다..
이전의 sum을 미리 더해서 %한 값을 다시 sum에 넣어줬어야 하나봄,,