https://www.acmicpc.net/problem/15829
n = int(input())
s = input()
alpha = "abcdefghijklmnopqrstuvwxyz"
ans = 0
for i in range(n):
ans += (alpha.index(s[i])+1) * (31 ** i)
print(ans % 1234567891)
문자열 메소드 index()
를 이용해 입력받은 문자열 s
의 각 알파벳을 숫자로 변환했다.
n = int(input())
s = input()
dic = {}
for i, j in enumerate("abcdefghijklmnopqrstuvwxyz"):
dic[j] = i+1
ans = 0
for i in range(n):
ans += dic[s[i]] * (31 ** i)
print(ans % 1234567891)
문제 제목인 hashing에서 착안한 풀이다(dictionary == hash table).
내장 함수인 enuemerate()
를 이용해 {alphabet: index+1}
의 dictionary를 생성한다.
n = int(input())
s = input()
dic = {j: i+1 for i,j in enumerate("abcdefghijklmnopqrstuvwxyz")}
print(sum([dic[s[i]] * (31 ** i) for i in range(n)]) % 1234567891)
풀이 2의 for
문을 comprehension
으로 변경했고,
또한 ans
변수에 값을 하나씩 추가하지 않고, 값을 리스트에 저장한 뒤 sum()
으로 합을 구했다.
chr
, ord
로 풀어볼 생각도 했는데, 해당 방식으로 많이 풀어봐서 좀 다르게 풀어봤다.{key: value for element in iterable}