15829: Hashing - Python

beaver.zip·2024년 12월 4일
0

[알고리즘] 백준

목록 보기
10/45

문제

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

풀이 1

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의 각 알파벳을 숫자로 변환했다.

풀이 2

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를 생성한다.

풀이 3

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)

풀이 2for문을 comprehension으로 변경했고,
또한 ans 변수에 값을 하나씩 추가하지 않고, 값을 리스트에 저장한 뒤 sum()으로 합을 구했다.


코멘트

  • chr, ord로 풀어볼 생각도 했는데, 해당 방식으로 많이 풀어봐서 좀 다르게 풀어봤다.
  • 처음에 문제를 제대로 읽지 않아 50점을 맞았다. 문제를 잘 읽어보자.
  • 재밌당

오늘의 교훈

  • dictionary comprehension: {key: value for element in iterable}
profile
NLP 일짱이 되겠다.

0개의 댓글