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
반응형