1394. 암호
1394번: 암호
첫 번째 줄에는 암호로 사용할 수 있는 문자가 공백 없이 주어지고, 두 번째 줄에는 컴퓨터의 암호가 주어진다. 암호에 사용할 수 있는 문자의 종류는 최대 100가지이고, 공백은 사용할 수 없다.
www.acmicpc.net

- 다른 사람 풀이
- n 진법인 이유
- 10 진법: 0~9까지 10가지 수로 10^n, 10^n-1.... 10^2, 10^1, 10^0 위치로 값을 구하는 것
- ex) abcdef -> 6진법
- bd = 2*6^1 + 4*6^0 = 12+4= 16
- 이분탐색 안하면 시간초과남!!
- n 진법인 이유
from collections import defaultdict
# x의 y승을 이분탐색으로 log시간으로 단축해서 계산
def power(x, y, p):
result = 1
x = x % p
while y > 0:
if y % 2 == 1:
result = (result * x) % p #아랫쪽에서 y를 반으로 나누면서 계산해둔 x^2를 여기서 곱함
y = y // 2
x = (x * x) % p
return result
code = input()
hash_table = defaultdict(int)
for i in range(len(code)):
hash_table[code[i]] = i+1
string = input()
answer = 0
l = len(string)
code_len = len(code)
MOD = 900528
for i in range(l):
exp = (l-1-i)
answer = (answer + (hash_table[string[i]] *
power(code_len, exp, MOD)) % MOD) % MOD
print(answer)
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][플로이드 워셜] 12908. 텔레포트 3 (0) | 2023.11.05 |
|---|---|
| [백준][순열] 15659. 연산자 끼워넣기(3) (0) | 2023.11.05 |
| [백준][BFS][트리] 14367. 회사문화1 (0) | 2023.10.29 |
| [백준] [백트래킹] 2661. 좋은 수열 (1) | 2023.10.17 |
| [백준][DP] 2011. 암호코드 풀이 (0) | 2023.10.15 |