알고리즘
[백준 15829] Hashing
kyeongjun-dev
2021. 12. 28. 16:58
코드
def solution(l, arr):
answer = 0
for i in range(l):
arr[i] = ord(arr[i])-96
answer = answer + arr[i] * 31**i
print(answer%1234567891)
l = int(input())
arr = list(input())
solution(l, arr)
설명
- 문제가 복잡하지만 간단하게 해석하면 다음과 같다.
- 문자열 입력은 a부터 z 까지 소문자만 나온다.
- a의 아스키코드 값은 97 이므로 간단하게 ord()를 해준 뒤, 96을 빼준다.
- 그리고 ord()-1 값과 31의 i 제곱 수를 answer에 계속 더해준다.
- 마지막에 1234567891로 나눈 값을 출력한다.
- 파이썬이나 자바였으면 정수 값의 범위에 신경을 써줬어야 하겠지만 파이썬이라서 그냥 된다.