[codeup] 4051 : 시간외 근무 수당

2087 단어 pythoncodeupcodeup

문제

[문제1] 시간외 근무 수당 (16점, 제한시간 1초)

A대학에서는 시간외 근무를 수기로 작성하고 있다. 행정실의 K씨는 시간외 근무 수당을 전산으로 처리하고자 한다. 이 대학의 시간외 근무 수당 규정은 아래와 같다.

  1. 시간외 근무는 최초 1시간은 제외하며, 최대 4시간까지 인정한다.

  2. 시간외 근무에 따른 금액은 30분에 5,000원으로 한다.

  3. 5일간의 시간외 근무 합계가 15시간 이상이면 받는 금액의 5%를 감하여 지급한다.

  4. 5일간의 시간외 근무 합계가 5시간 이하이면 받는 금액의 5%를 더하여 지급한다.

시간외 근무 수당을 계산하는 프로그램을 작성하시오.

입력

  1. 5일간의 시간외 근무 시작 시각 s와 종료 시각 e가 주어진다. (단, 16.0 ≦ s ≦ e ≦ 24.0)

  2. 30분 단위로 입력이 가능하며, 30분은 0.5로 입력된다. (16시 30분은 16.5로 표기한다.)

입력 예시

16.0 16.5
17.0 20.5
18.5 23.0
22.5 23.5
19.5 22.5

출력

첫 줄에 최종 시간외 근무 수당을 출력한다(단, 단위는 생략한다).

출력 예시

80000

문제풀이

처음에 문제가 복잡해보여서 어려울 것이라 생각했는데 막상 코드를 작성하고 나니 그렇게 어려운 건 아니였다.
뭔가 더 깔끔하게 풀 수 있을 것 같은데 마음처럼 잘 되지는 않는 것 같다.

테스트 케이스는 내가 직접 만들어서 몇가지 해보았을때 정상적으로 진행되는 것 확인했다.

work_time = [list(map(float, input().split())) for _ in range(5)]


def calculate_work_time(work_time):
    day_working_time = []
    for i in range(len(work_time)):
        time = work_time[i][1] - work_time[i][0]
        day_working_time.append(time)
        # 시간 외 근무시간 중 1.0 시간 제외
        day_working_time[i] = day_working_time[i] - 1.0
    return day_working_time


def total_work_time(work_time):
    working_time = calculate_work_time(work_time)
    total_working_time = 0
    for i in range(len(working_time)):
        if working_time[i] <= 0:
            working_time[i] = 0
        elif working_time[i] >= 4.0:
            working_time[i] = 4.0

    for time in working_time:
        total_working_time += time

    return total_working_time


def total_overtimePay(work_time):
    time = total_work_time(work_time)
    overtimePay = ((time/0.5)*5000)
    if time >= 15.0:
        overtimePay -= (overtimePay * 0.05)
    elif time <= 5.0:
        overtimePay += (overtimePay * 0.05)

    return int(overtimePay)


print(total_overtimePay(work_time))

좋은 웹페이지 즐겨찾기