시나브로

15829. Hashing 본문

알고리즘/백준

15829. Hashing

혬혬 2020. 1. 14. 21:53
728x90

만약 해싱을 공부하고자 하면 이 문제를 필수적으로  풀어보길 바란다. 

해싱의 기본개념도 알 수 있고 간단한 구현도 가능하다.

구현의 경우, 문제를 그대로 구현하면 된다. 

여기서 31은 영어 최대 숫자인 26보다 큰 소수이기 때문에 설정하였다. (이 숫자는 소수를 사용하는 것이 좋을 것 같다.)

또한, 1234567891도 소수이다. 

 

#include<stdio.h>


int main(void) {
	freopen("inp.inp", "r", stdin);
	freopen("out.out", "w", stdout);

	char buffer = 0;
	int number = 0;
	scanf("%d", &number);
	scanf("%c", &buffer);
	long long sum = 0;
	int box = 0;
	long long list[51] = { 0 };
	list[1] = 1;
	for (int i = 2; i < 51; i++) {
		list[i] = (list[i - 1] * 31) % 1234567891;
	}
	for(int i=1;i<=number;i++){
		scanf("%c", &buffer);
		box = buffer - 'a'+1;
		sum = (sum+box*list[i]) % 1234567891;
	}
	printf("%d", sum % 1234567891);
	return 0;
}

 

https://www.acmicpc.net/problem/15829

 

15829번: Hashing

APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정의한다. 해시 함수는 무궁무진한 응용 분야를 갖는데, 대표적으로 자료의 저장과 탐색에 쓰인다. 이 문제에서는 여러분이 앞으로 유용하게 쓸 수 있는 해시 함수를 하나 가르쳐주고자 한다. 먼저, 편의상 입력으로 들어오는 문자열에는 영문 소문자(a, b, ..., z)로만 구

www.acmicpc.net

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

1197. 최소 스패닝 트리  (0) 2020.01.17
1181. 단어 정렬  (0) 2020.01.16
2075. N번째 큰 수  (0) 2020.01.14
1551. 수열의 변화  (0) 2020.01.13
8393 합  (0) 2020.01.09
Comments