[백준/파이썬] 15829번: Hashing

수박강아지·2025년 1월 7일

BAEKJOON

목록 보기
2/174

문제

https://www.acmicpc.net/problem/15829

풀이

  • 영어 소문자로만 구성
  • 각 알파벳에 고유한 번호 부여
  • 각 입력값을 rir^i를 곱해 해시값에 추가
  • 구해진 해시값을 1234567891으로 나누어 몫 구하기

저는 알파벳값을 문자열에 넣어서 해당 인덱스값을 이용하여 풀었습니다.
알파벳 앞에 무의미한 0을 추가해 올바른 인덱스값을 사용할 수 있도록 조정하였습니다.(a = 1, b = 2, ...)

입력 받은 문자열을 순회하여 해당 알파벳의 인덱스 값을 찾아내(hsh.index(line[i]))
31의 ii승만큼 곱하여 해시값을 구했습니다.

마지막으로 M의 값으로 나누어 몫을 구해주면 됩니다.

내 코드

import sys
input = sys.stdin.readline

hsh = '0abcdefghijklmnopqrstuvwxyz'
l = int(input())
line = input().rstrip()
res = 0

for i in range(l):
    res += hsh.index(line[i]) * (31 ** i)

print(res%1234567891)

0개의 댓글