끄적거림

[HackerRank] Repeated String 본문

Python/알고리즘(코딩테스트)

[HackerRank] Repeated String

Signing 2022. 6. 29. 00:53
728x90
반응형

문제

요약하면, 문자열 s가 주어졌을 때, s가 무한히 반복되는 상황이다.

이때, 처음부터 n번째까지의 자리까지 문자열에서 a의 개수를 반환하는 문제이다.

 

코드

# import numpy as np
import collections as co
"""
- s : 무한히 반복될 문자열
- n : n번째 자리 수
"""

# method 1 : co.Counter()
# nains = dict(co.Counter(sl).most_common())['a']
# nainsubs = dict(co.Counter(s[:rrep]).most_common())['a']

# method 2 : for loop count
def repeatedString(s, n):
    sl = list(s)
    ns = len(sl)

    nrep = n // ns
    rrep = n % ns
    print(nrep, rrep)

    nains = 0
    for a in sl:
        if a == "a": nains += 1

    nainsubs = 0
    for a in list(s[:rrep]):
        if a == "a": nainsubs += 1

    print(nains, nainsubs)

    res = nrep * nains + rrep * nainsubs

    return res

if __name__ == '__main__':

    # s = "epsxyyflvrrrxzvnoenvpegvuonodjoxfwdmcvwctmekpsnamchznsoxaklzjgrqruyzavshfbmuhdwwmpbkwcuomqhiyvuztwvq"
    # n = 549382313570
    s = "ojowrdcpavatfacuunxycyrmpbkvaxyrsgquwehhurnicgicmrpmgegftjszgvsgqavcrvdtsxlkxjpqtlnkjuyraknwxmnthfpt"
    n = 685118368975

    # r = 16481469408
    # r = 41107102139
    result = repeatedString(s, n)

    print(result)

해설

  • 23개의 test case 중 12개나 틀렸다.
  • 로직상 문제는 없는 거 같은데 큰 수를 다룸에 있어 뭐낙 오류가 나는 느낌이다.
  • 원인 아직 파악 못함ㅠㅠ

 

실제 정답

"""
- s : 무한히 반복될 문자열
- n : n번째 자리 수
"""

def repeatedString(s, n):
    res = s.count("a") * (n // len(s)) + s[:n % len(s)].count("a")
    
    return res

if __name__ == '__main__':

    s = "ojowrdcpavatfacuunxycyrmpbkvaxyrsgquwehhurnicgicmrpmgegftjszgvsgqavcrvdtsxlkxjpqtlnkjuyraknwxmnthfpt"
    n = 685118368975

    result = repeatedString(s, n)

    print(result)
  • 충격적인 정답을 보았다.
    • 우선, python의 기능을 잘 활용했다는 점
    • 나는 10줄이 넘는 코드를 단 한 줄로 줄였다는 점
    • 그럼에도 모든 test case를 맞췄다는 점
  • 정말 한 수 배웠다..
  • 어디서 잘못되었는지 확인했다. 이런걸로 틀리다니ㅠ 아직 멀긴 멀었다.
728x90
반응형

'Python > 알고리즘(코딩테스트)' 카테고리의 다른 글

[HackerRank] Arrays: Left Rotation  (0) 2022.06.29
[HackerRank] 2D Array  (0) 2022.06.29
[HackerRank] Jumping on the Clouds  (0) 2022.06.28
[HackerRank] Counting Valleys  (0) 2022.06.28
[HackerRank] 양말 짝 맞추기  (0) 2022.06.28
Comments