[HackerRank] Weighted Uniform Strings

개발새발log·2023년 5월 19일
0

해커랭크&릿코드

목록 보기
4/4

문제

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 code
  • chr(n) : ascii code -> char

참고

여기서 필요하진 않았지만 외워두면 편하다:

'A' ascii# : 65
'a' ascii# : 97
profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글