백준 15829 Hashing (python)

WoongSoo Kim·2021년 5월 21일
post-thumbnail


간단한 문제이다. 알파벳을 1부터 26의 숫자로 치환해주고, 그것을 특정 상수 r과 곱해준다. 이 때 이 상수는 문자열의 문자 위치 값만큼 거듭제곱을 해준다.

위와 같은 일들을 문자열이 끝날 때까지 반복해서 그 값들을 모두 더한 후 알파벳 숫자인 26과 서로소인 소수 M과 modular연산, 나머지 연산을 한 값을 출력하면 된다.

알파벳을 숫자로 바꾸는 방법에 따라 매우 다양한 정답이 나올 수 있을 듯 하다. 아래의 방법은 미리 모든 알파벳을 문자열에 넣고 문자열의 모든 문자들과 하나하나 비교하여 (그 위치 + 1)을 하는 방법으로 변환하였다.

r = 31
M = 1234567891
alph = "abcdefghijklmnopqrstuvwxyz"


def H(str, L, r, M):
    ans = 0
    for i in range(L):
        ai = alph.index(str[i]) + 1
        ans += (ai * pow(r, i))
    ans = ans % M

    return ans


L = int(input())
str = input()
print(H(str, L, r, M))
profile
변하고자 할 때는

0개의 댓글