백준 15829번 바로가기

나의 풀이

ans = 0
n = 0
_ = int(input())

for i in input():
  ans += (ord(i)-96) * (31**n)
  n += 1

print(ans)

CODE REVIEW

  1. 한참 암호화폐와 블록체인에 열광이 불었을 때에 해시함수에 대해 알게된 기억이 있다. nomad coders 니코가 설명한 해시 함수도 잘 설명되어있다. 해시 함수는 입력에 대한 출력을 찾기 쉽지만, 반대로 출력값을 보고 입력을 유추하기는 어렵기에 암호보안에 많이 쓰인다고 들었다.

  2. 문제로 돌아오게 되면, 위에서 간단하게 짠 코드의 경우 50점 부분점수를 받았다. 길이가 5이하인 경우는 커버했지만, 길이가 50까지 길어지면 커버할 수 없다는 건데 어딜 고치면 보완할 수 있을까? 답은 이미 문제에 제시되어있었는데, 해시 함수를 mod M으로 modulo을 이용했으므로, 큰 소수인 숫자 M=1234567891로 나눠준 나머지를 구하면 된다. ans부분만 (ans % 1234567891)로 수정하면 된다!