목차
1. 문제
https://www.acmicpc.net/problem/15829
2. 해결
try1) 런타임 에러
# 입력
len = int(input())
userList = input()
M = 1234567891
R = 31
# ord('a') = 97 이용하여 알파벳에 고유한 계수 부여 (1~26)
arrList = []
for a in userList:
arrList.append(ord(a) - 96)
# 해시 값 계산
hashResult = 0
for l in range(len):
hashResult += int(arrList[l]) * (R ** l)
print(hashResult % M)
굳이 모든 알파벳에 고유한 계수를 부여할 필요가 없었다.
입력된 알파벳에 대해서만 계산했어도 충분하니까!
try2)
# 입력
len = int(input())
userList = input()
M = 1234567891
R = 31
# ord('a') = 97 이용하여 알파벳에 고유한 계수 부여 (1~26)
hashResult = 0
for i in range(len):
num = ord(userList[i]) - 96
hashResult += num * (R ** i)
print(hashResult % M)
3. check point
1) 문제 이해
- 입력된 문자에 대해 각각 고유한 계수 부여
- ord('a') = 97을 이용해서 각 문자에 1부터 26까지 값을 부여하려면 각 아스키코드 값에서 96을 빼주면 된다.
- 문제에서 알려준 hash값 구하는 계산식에 집어넣으면 된다.
- 제곱은 ** 이용
- mod는 나머지 연산자
2) ord()
처음에 고유한 계수...? 어떻게 하냐.. 하면서 막막했는데 갑자기 전에 공부한 아스키코드가 떠올랐다.
ord('a) = 97 외우자!!
728x90
'Growth & Practice > 코딩테스트' 카테고리의 다른 글
| [python] 1546. 평균 (0) | 2024.10.27 |
|---|---|
| [python] 1259. 팰린드롬수 (0) | 2024.10.27 |
| [python] 2798. 블랙잭 (0) | 2024.10.27 |
| [python] 2231. 분해합 (2) | 2024.10.20 |
| [python] 4153. 직각삼각형: 0이 입력되면 종료되는 코드, max(), remove() (0) | 2024.10.19 |