백준 4649번
https://www.acmicpc.net/problem/4649
문제
후기
맞힌 사람이 많지 않은 문제를 풀기 위해 풀은 사람이 적은 순으로 정렬해서
찾은 문제의 12번째다.
처음 이 문제를 봤을때는 문자열을 입력받은 다음 순서대로 문자열을 슬라이싱해서
리스트에 넣고, 리스르를 정렬한 값을 Dictionary에 넣으면 된다고 생각했다.
너무나도 당연하게 시간 초과가 났고, 로직의 수정이 필요했다.
슬라이싱 한 문자열을 리스트에 넣고 정렬하는 것이 아니라,
해당 문자열의 "A", "G", "C", "T" 를 바로 count해서 그 count값을 문자열로 저장하는 방식을 택했다.
import sys
input= sys.stdin.readline
T = int(input())
for _ in range(T):
K , word = map(str,input().rstrip().split())
K = int(K)
li = dict()
for i in range(len(word)-K+1):
new_word = word[i:i+K] #문자열을 앞에서 부터 슬라이싱
k= str(new_word.count("A")) + str(new_word.count("G")) + str(new_word.count("C")) + str(new_word.count("T"))
#k라는 새로운 변수로 A G C T 의 count값을 문자열로 저장한다.
if k not in li.keys():
li[k] = 1
else:
li[k] += 1
print(max(li.values())) #가장 많이 중복된 문자열의 count값을 출력한다.