[c++] 백준 해쉬 15829

알감자·2022년 5월 3일
0

백준알고리즘

목록 보기
30/52

#15829

해쉬함수란?
: 하나의 문자열을 보다 빨리 찾을 수 있도록 주소에 직접 접근할 수 있는 짧은 길이의 값이나 키로 변환하는 알고리듬을 수식으로 표현한 것.

즉, 해싱 함수(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에 넣어줬어야 하나봄,,

0개의 댓글