리셋 되지 말자

[백준 15829] Hashing 본문

알고리즘

[백준 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로 나눈 값을 출력한다.
  • 파이썬이나 자바였으면 정수 값의 범위에 신경을 써줬어야 하겠지만 파이썬이라서 그냥 된다.
Comments