https://www.hackerrank.com/challenges/weighted-uniform-string/problem
딕셔너리를 활용한 완전 탐색으로 해결했다
등장하는 모든 알파벳에 대해 최장 길이를 딕셔너리에다가 캐싱(=record)해두고, 전체 쿼리를 돌면서 record에 해당하는 가중치로 나누어 떨어지면 최장 길이 * 알파벳 가중치 이하인지 확인했다.
from collections import defaultdict
def weightedUniformStrings(s, queries):
# store alphabets and max counts
tmps = s + '0'
record, cur = defaultdict(int), defaultdict(int)
cur[tmps[0]] = 1
for i in range(1, len(tmps)):
if tmps[i] != tmps[i - 1]:
record[tmps[i - 1]] = max(record[tmps[i - 1]], cur[tmps[i - 1]])
cur[tmps[i - 1]] = 0
cur[tmps[i]] += 1
# main logic
res = []
for query in queries:
for c in record.keys():
w = ord(c) - ord('a') + 1
if query % w == 0 and query <= record[c] * w:
res.append("Yes")
break
else:
res.append("No")
return res
ord(c)
: char -> ascii codechr(n)
: ascii code -> char여기서 필요하진 않았지만 외워두면 편하다:
'A' ascii# : 65
'a' ascii# : 97