python 시간 중복 계산 (feat. set)

최준영·2022년 4월 23일
0

python 시간 중복 계산

문제

A 직원은 09:00 출근 14:00 퇴근
B 직원은 12:00 출근 20:00 퇴근

점심 시간은 12:00-13:00

점심시간을 제외하고 A직원이나 B직원이 가게에 있었던 시간은 몇분인지 구하시오.

접근 방식

자료구조 중 SET은 중복이 존재하지 않는다는 특징이 있습니다.

중복제거((A의 근무 시간 목록) + (B의 근무 시간 목록)) - (점심시간)

중복 제거 후 결과의 길이를 구하면 중복 제거된 시간을 찾아낼 수 있습니다.

def get_work_time(start, end):

    work_min_list = []
    work_range = []
    bgng_dt = datetime.datetime.strptime(start, "%Y%m%d%H%M")
    end_dt = datetime.datetime.strptime(end, "%Y%m%d%H%M")

    if bgng_dt == end_dt:
        return work_min_list
    else:
        work_range = daterange_min(bgng_dt, end_dt - datetime.timedelta(minutes=1))


    for dt in work_range:
        work_min_list.append(dt)

    return work_min_list


def daterange_min(bgng_dt, end_dt):
    for n in range(int((end_dt - bgng_dt).seconds / 60) + 1):
        yield bgng_dt + datetime.timedelta(minutes=n)


A_work_list = get_work_time("202204230900", "202204231400")
B_work_list = get_work_time("202204231200", "202204232000")
launch_list = get_work_time("202204231200", "202204231300")

print("결과:", len(list(set(A_work_list + B_work_list) - set(launch_list))))

결과 : 600

0개의 댓글