일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 24511
- 사용자정의필터
- sloved.ac
- 프로그래머스
- 6730
- 23971
- sovled.ac
- 1342
- PYTHON
- 파이썬
- PS
- 알고리즘
- java
- 장고
- SWEA
- Algorithm
- 자바
- 11688
- 라이브러리
- 9081
- programmers
- 25379
- 17087
- pccp
- Django
- solved.ac
- 15965
- 2866
- 백준
- 20006
Archives
- Today
- Total
코깽이의 코딩일기
Python 백준 15829 - Hashing 본문
반응형
백준 링크
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 |