본문 바로가기

BOJ/Python

[BOJ/백준] 15829 - Hashing (Python)

문제

문제링크

 r은 31,  M은 1234567891일 때, 위의 식으로 해시값을 구하라.

 

풀이

소문자로 이루어진 문자열은 a부터 1, b는 2, ... 이렇게 값이 부여된다.

각각 값을 부여하기보다는 a의 아스키값-1을 각 문자의 아스키 코드값에서 빼서 값을 계산했다.

모든 문자의 거듭제곱곱한 값의 합을 구하였을 때, M으로 나눈 나머지 값을 출력한다.

 

코드

l=int(input())
s=input()

temp=31
tot=0
for i in range(l):
    c=ord(s[i])-96
    tot+=(c*(temp**i))
print(tot%1234567891)