😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

[15829] Hashing U / 파이썬 (코드식 이해하기 쉽게 풀어쓰기)

또방91 2022. 2. 5. 16:39
728x90

 

 

 

 

✏️ 문제 링크

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

 

15829번: Hashing

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

www.acmicpc.net


실패....ㅠㅠ

문제를 제대로 읽지 않고, 힌트만 봤던 탓에

<-- 힌트

 

1234567891 보다 크면 안되는 조건을 제대로 보지 못했다.... ㅋㅋㅋ 데헷


정답은 ??

1) 짧지만 살짝 복잡한  ver

1
2
3
4
5
6
7
8
# 짧지만 조금 복잡한ver =======================
t= int(input())
test= str(input())
result=0
for i in range(t):
    result+= (ord(test[i])%96)*31**i %1234567891
 
print(result %1234567891)
cs

 

2) 길지만 이해하기 쉬운 ver

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#[1] 딕셔너리 만들기====================
# chr(97)은 a이니까-> 딕셔너리에 {'a':1 } 형식
dic =dict()
i= 97
num= 1
while i!=123:
    dic[chr(i)]=num
    i+=1
    num+=1
 
#[2] 값 계산하여 결과 도출하기===========
t= int(input())
test= str(input())
result= 0
cnt= 0
for i in range(t):
    result+= (dic[test[i]]*31**cnt) %1234567891
    cnt+=1
 
print(result%1234567891)
cs

 


💯 풀이 과정

1) 짧지만 살짝 복잡한  ver

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
t= int(input())
test= str(input())
result=0
 
# ord() 함수로 a~z까지의 아스키코드숫자를 불러오고
# 예) test의 첫번째 숫자가 b라면 ord(b) => 98이 나올거고
# --> 이 결과에 96 나누면 2도출
 
for i in range(t):
    result+= (ord(test[i])%96)*(31**i) %1234567891 
    # 누적합을 하기 전 값에도 1234557891로 나눠주기
 
 
# 결과 값에 대해서도 1234567891보다 크면 안되니까
print(result %1234567891)
cs

 

2) 길지만 이해하기 쉬운 ver

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
# 크게 <<2개의 part>> 로 코드식을 작성한다.
 
#[1] 딕셔너리 만들기====================
# chr(97)은 a이니까
dic =dict()
i= 97
num= 1
 
# -> 반복문 계속하다보면 {'a':1, 'b':2 ..... } 형식으로 
while i!=123:
    dic[chr(i)]=num
    i+=1
    num+=1
 
#[2] 값 계산하여 결과 도출하기===========
 
t= int(input()) #숫자 받기
test= str(input()) #문자 입력받기
 
result=0 # 출력 결과값
cnt=0 
 
for i in range(t):
    #누적합으로 넣기 전 1234567891로 나누기
    result+= (dic[test[i]]*31**cnt) %1234567891 
    cnt+=1 
 
# 결과 값에 대해서도 1234567891보다 크면 안되니까
print(result%1234567891)
cs

 


😎 오늘의 한줄평

: 오랜만에 아스키코드를 사용하려니 함수도 헷갈리고 그랬는데, 확실히 공부하고 넘어가쟈

 

 

 

728x90