Python3/백준 알고리즘

2022.02.24 [백준] (python 파이썬) Hashing

ian's coding 2022. 2. 24. 20:11
728x90
반응형

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

 

15829번: Hashing

APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정

www.acmicpc.net


풀이

우선 딕셔너리를 이용해 각 알파벳에 고유 번호를 지정해 주었다.

참고로 아스키 코드에서 문자로 변환은 chr(), 문자에서 아스키 코드로는 ord()를 사용하면 된다.

그리고 s의 길이만큼 for문을 돌려 각 (알파벳의 고유값*31**(알파벳의 인덱스))%m을 해주었다. 

총 해쉬합인 sum을 그대로 출력했을 때, 50%성공이 결과로 나왔다. 아마 출력할 수 있는 범위를 벗어 난듯하다.

그래서 sum%m을 해주니 100%성공이 결과로 나왔다.

1
2
3
4
5
6
7
8
9
10
L=int(input())
s=input()
m=1234567891
dict={}
for i in range(1,27):
    dict[chr(96+i)]=i
sum=0
for i in range(len(s)):
    sum+=(dict[s[i]]*31**i)%m
print(sum%m)
cs

 

 

 

 

728x90
반응형