안녕하세요. 정말 오랜만에 찾아뵙는 것 같습니다.
그동안 일도 많고 그래서 제대로 공부를 하지 못했는데, 이번 시간에는 한 번 Hashing 이라는 문제를 풀어보도록 하겠습니다.
일단 문제입니다.
Hashing 에 관련된 식이 있지만, 일단 이런 식이 있다는 것을 인지하고 천천히 문제를 읽어나갑시다.
여기서 메모하나 하고 갑시다.
문제 풀 때 필요하니, 변수 r 과 M, 메모 슥 하나 하고 진행하도록 합시다.
이제 입력 값입니다.
보통 두 번째 줄에 들어오는 값들을 input 받을 때, sys.stdin.readline() 을 통해 값을 입력받지만, 그렇게 된다면 입력을 마칠 때 입력하는 Space Bar 의 ASCII 값도 포함되기 때문에 input() 함수를 사용하도록 하겠습니다.
힌트를 적절히 활용해보도록 하겠습니다.
(ASCII 코드를 정수로 바꾼 값) * (r 의 i 제곱) => (ASCII 코드를 정수로 바꾼 값) * (r ** i)
문자열의 문자는 소문자 a 의 ASCII 값이 96이므로, (ASCII 코드를 정수로 바꾼 값 - 96)
다음과 풀어나가도록 합니다.
하단의 전체 코드입니다.
a = int(input())
b = input()
r = 31
m = 1234567891
number = 0
for i in range(len(b)):
value = ord(b[i]) - 96
number += value * (r ** i)
print(number % m)
이상 오늘은 여기서 마치도록 하겠습니다. 감사합니다.