강의로 돌아가기
김재민

부등식이 똑같은 것 같은데 결과가 달라집니다.

26번째 줄 부등식부분입니다. 확인하고자하는 시간 범위안에 로그가 들어가지 않으면 continue하고, 그렇지 않은경우 cnt + 1 해줍니다.
이 부등식을 다음과 같이 바꿨더니, 2, 3, 18 번 채점에서 틀린 결과가 나왔습니다.
if s <= starts[j] <= e or s<=ends[j]<=e:
cnt += 1

제가 보기엔 원래의코드와 바꾼 코드가 똑같은 것 같은데 왜 차이가 나는지 도저히 이해가 되지 않습니다.

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import datetime

def solution(lines):
    answer = 0
    starts = []
    ends = []
    for line in lines:
        end = datetime.datetime.strptime(line[11:19], "%H:%M:%S")
        end += datetime.timedelta(milliseconds=int(line[20:23]))
        ends.append(end)

        dur = datetime.timedelta(seconds = float(line[24:-1]))
        start = end - dur + datetime.timedelta(milliseconds=1)
        starts.append(start)

    mx = 0
    delta = datetime.timedelta(seconds=1)
    delta2 = datetime.timedelta(seconds=0.001)
    for i in sorted(starts + ends):
        if i <= datetime.datetime.strptime("00:00:00", "%H:%M:%S")-delta:
            continue
        cnt = 0
        s = i
        e = i+delta-delta2
        for j in range(len(starts)):
            if starts[j] > e or s> ends[j] :
                continue
            cnt += 1
        mx = max(mx, cnt)
    return mx
  • 김재민

    두 부등식이 어떻게 다른건지 알려주시면 감사하겠습니다.

    김재민―2020.05.29 20:23
  • hongsungin

    위 부등식에는 start[j] < s and e < end[j] 가 포함되지 않았어요

    hongsungin―2020.07.07 17:11
  • hongsungin

    저도 막혔었는데 질문자님 질문보고 해결했네요 감사합니다

    hongsungin―2020.07.07 17:13
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.