코깽이의 코딩일기

Python 백준 15829 - Hashing 본문

PS/백준

Python 백준 15829 - Hashing

코깽이 2023. 7. 24. 17:43
반응형

백준 링크

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

 

15829번: Hashing

APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정

www.acmicpc.net

 

문제

조건

입력

출력

입출력 예시

힌트

 

제출한 코드

import sys
# 입력 받는 문자열 길이
n = int(sys.stdin.readline().strip())

# 문자열 입력
test = list(map(str, sys.stdin.readline().strip()))
# 최종 결과 값이 저장 될 변수 선언
result = 0

for i in range(len(test)):
    # ord 함수로 저장된 문자를 유니코드로 변경하고 연산을 수행
    result += (ord(test[i])-96) * 31**i
    # 각 항 결과를 확인해보는 코드
    # print("{}번째 항 : {}".format(i, result))

print(result)

시간제한이 1초이기에 입력받는 부분부터 속도면에서 더 빠른 sys.stdin.readline() 함수를 이용해서 유니코드로 변환하여 수식에 따라 연산을 해서 값을 더하고 출력하는 방식으로 코드를 작성해 보았다. 예제 입력을 수행했을 때에는 별 문제가 보이지 않았지만 백준에서 50점을 받았다.

 

해당 문제에는 2가지 조건중 small 부분은 해결했지만 large부분을 해결하지 못한것 같다. 아마도 1초인 시간제한에 걸린 것 같다.


50점을 받은 이유는 수식 마지막에 붙어있는 mod M 풀지 못해서였다. 사실 이게 무슨 뜻을 의미하는지는 몰랐다.

%라는 뜻인 것을 확인하고 마지막 결과 출력에서 코드를 약간 수정해 주니 100점을 받았다.

 

import sys
# 입력 받는 문자열 길이
n = int(sys.stdin.readline().strip())

# 문자열 입력
test = list(map(str, sys.stdin.readline().strip()))
# 최종 결과 값이 저장 될 변수 선언
result = 0

for i in range(len(test)):
    # ord 함수로 저장된 문자를 유니코드로 변경하고 연산을 수행
    result += (ord(test[i])-96) * 31**i
    # 각 항 결과를 확인해보는 코드
    # print("{}번째 항 : {}".format(i, result))

print(result % 1234567891)
반응형

'PS > 백준' 카테고리의 다른 글

Python 백준 1436 - 영화감독 숌  (0) 2023.09.27
Python 백준 23971- ZOAC 4  (1) 2023.09.14
Python 백준 2839 - 설탕 배달  (0) 2023.09.01
Python 백준 11866 - 요세푸스 문제 0  (0) 2023.07.26
Python 백준 10989번 - 수 정렬하기 3  (0) 2023.07.20