강의로 돌아가기
LimDongHee

테스트케이스3의 입력값이 궁금합니다!

from datetime import timedelta,datetime
dt,td = datetime,timedelta
def solution(array) :
    t = [0] * (len(array))
    for i in range(len(array)):
        a, b, c = array[i].split()
        t[i] = (dt.strptime(b, "%H:%M:%S.%f") - td(seconds=float(c[:-1]) - 0.001),
                dt.strptime(b, "%H:%M:%S.%f"))
    result = 0
    for i in range(len(t)):
        start, end = t[i]
        temp = 1
        for j in range(i + 1, len(t)):
            left, right = t[j]
            if right - td(seconds= 3) > end: break
            if left > end + td(seconds=1 - 0.001): continue
            temp += 1
        result = max(result, temp)
    return result

제가 쓴 코드가 다음과 같은데 for루프를 돌 때 끝까지 돌지 않고
다음과 같이

if right - td(seconds= 3) > end: break

응답완료 시간의 간격이 3초 이상 벌어지게 되면 stop하게 만들었습니다. 그런데 테스트 케이스3에서만 틀리더라구요
이 값은 대략 3.8부터 또 통과하게 되는데, 제가 일반화를 실패한 것인지, 아니면 테스트케이스가 잘못된것인지 의문이네요

일단 제가 생각 했을 때에는 시간간격은 최대 3초라는 것이 안지켜지지 않았나 싶은데... 어떻게 생각하시나요?

  • 박소영

    시간이 많이 지나서 이미 푸셨겠지만,, 답글 답니다. 위 코드에 따르면 end =0, right = 3, left=0.5 일 때 break가 됩니다. 하지만 end와 left의 간격이 1초 미만이므로 temp가 1이 증가해야 정답입니다. 따라서 end =0, left=1 일 때 부터 break가 되야 하므로 이때 right가 가질 수 있는 최댓값은 4 입니다. 즉, right와 end가 4초 이상 벌어지게 되면 stop 해야 합니다.

    박소영―2020.01.20 20:28
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.