[BOJ]백준#8933 Silver 3 MCS⚕⚕(Python, 파이썬)

임준성·2022년 9월 23일
0

백준 Algorithm

목록 보기
57/59
post-thumbnail

백준 4649번
https://www.acmicpc.net/problem/4649

문제



후기

⏰ 풀이시간 30분 ++⏰

맞힌 사람이 많지 않은 문제를 풀기 위해 풀은 사람이 적은 순으로 정렬해서

찾은 문제의 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값을 출력한다.
profile
아무띵크 있이

0개의 댓글