15829 : Hashing - 파이썬

낙원·2022년 11월 24일
1

Baekjoon

목록 보기
11/15
post-thumbnail

문제

문제 링크


위 식에서 r의 값은 31로 하고 M의 값은 1234567891 로 정한다.
N을 입력 받고 N의 길이만큼 문자열을 입력받는다.

예시
5
abcde
abcde의 해시 값은 1 × 31^0 + 2 × 31^1 + 3 × 31^2 + 4 × 31^3 + 5 × 31^4 = 1 + 62 + 2883 + 119164 + 4617605 = 4739715이다.

코드

50점 코드

이런 문제는 처음 봤다ㅋㅋㅋㅋ🤣

import sys
import math

n = int(sys.stdin.readline())

a = sys.stdin.readline().rstrip()

result = 0

for i in range(len(a)):
    k = ord(a[i]) - ord('a') + 1

    result += k * math.pow(31,i)

print(int(result) % 1234567891)

알아보니 math.pow 함수는 수가 커지면 오차가 발생한다고 한다.

100점 코드

import sys

n = int(sys.stdin.readline())

a = sys.stdin.readline().rstrip()

result = 0

for i in range(len(a)):
    k = ord(a[i]) - ord('a') + 1

    result += k * (31 ** i)

print(int(result) % 1234567891)

그래서 math.pow 부분을 바꿔주니 다행히 100점이 나왔다.


이산수학 과제할 때마다 math.pow() 를 아주 유용하게 썼는데 이렇게 배신을 당하다니...😪😪😪😪😪

0개의 댓글