문제
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)
'BOJ > Python' 카테고리의 다른 글
[BOJ/백준] 1703 - 생장점 (Python) (0) | 2024.11.11 |
---|---|
[BOJ/백준] 32642 - 당구 좀 치자 제발 (Python) (0) | 2024.11.11 |
[BOJ/백준] 14471 - 포인트 카드 (Python) (1) | 2024.11.10 |
[BOJ/백준] 17608 - 막대기 (Python) (1) | 2024.11.09 |
[BOJ/백준] 27465 - 소수가 아닌 수 (Python) (1) | 2024.11.08 |