본문 바로가기

Baekjoon

[Baekjoon]백준 15829 Hashing(브론즈 2) - Python

문제설명 1
문제설명 2

문제를 살펴보면 자료구조 시간에 배우는 해시 함수를 구현하는 문제이다

해당 문제의 경우 a부터 z까지만 입력받아 이를 제곱연산 이후 나머지 연산을 통해 값을 출력하는 문제이다

 

문자열을 입력받을 때, list로 입력받으면서 strip()을 통해 한글자씩 리스트에 저장되도록 작성하였다

이후 for문을 사용하여 문제에서 제시한 연산을 수행하면 되는데, enumerate를 사용하여 거듭제곱할 숫자와 리스트의 값(문자열)

을 사용할 수 있게 작성하였다 문자열은 ord()를 통해 제곱할 수를 연산해주면 된다

a는 아스키코드 값으로 97(10진수)인데, 문제에서 a는 1로 처리하기 때문에 -96을 해주면 된다

import sys
input = sys.stdin.readline

Len = int(input())
Eng = list(input().strip())
#print(Eng)
hash = 0
for idx, s in enumerate(Eng):
    num = ord(s) - 96
    hash += num * (31 ** idx)
    
print(hash % 1234567891)