그냥 반복문 하나 함수에 얹은것 뿐인거 같은데

냅다 틀렸다고 바꿔버리네

근데 생각할만한 예외상황은 다 직접 입력해 봤는데 내가 했을땐 잘되더라

사용하는 라이브러리도 기본내장 라이브러리 하나가 끝이라 환경 문제도 아닌것 같고..

참고로 3.8.10버전임


코드 1 (제대로 작동하는 코드)

from re import search

with open("genome.txt") as f:
    genome = f.read().replace("\n", "")

= input().split() # 접두문자열: list[str]
= input().split() # 접미문자열: list[str]

pattern = rf"({'|'.join(S)}).*?({'|'.join(E)})" #패턴: str
res = []  # 반환값: list[str]
while True:
    tmp = search(pattern, genome) # 패턴 검색: re.Match
    if tmp is None:
        break
    res.append(tmp.group())
    genome = genome[tmp.span()[0] + 1 :]

print(sorted(res, key=lambda seq: (len(seq), seq))[0] if res else "None")


코드 2 (제대로 작동하지 않는? 코드)

from re import search, split

# s로 시작하고 e로 끝나는 모든 문자열 추출
def find_units(genome, pattern):  # -> list[str]
    res = []
    while True:
        tmp = search(pattern, genome)
        if tmp:
            res.append(tmp.group())
            genome = genome[tmp.span()[0] + 1 :]
        else:
            break
    return res

# main
with open("genome.txt", "r") as f:
    genome = f.read().replace("\n", "")  # 게놈 데이터:str

= split(r"[]+", input())  # 시작 유닛:list[str]
= split(r"[]+", input())  # 끝 유닛:list[str]

pattern = rf"({'|'.join(S)}).*?({'|'.join(E)})"

sol = sorted(
    find_units(genome, pattern), key=lambda x: (len(x), x)
)  # 시작 유닛과 끝 유닛을 조합하여 모든 유닛을 추출하고, 길이와 알파벳 순으로 정렬: list[str]

print
(sol[0] if sol else "None")