Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

ol-rlo-zl

[프로그래머스 lv2] 주차 요금 계산 - 파이썬(Python) 본문

Programmers(Python)

[프로그래머스 lv2] 주차 요금 계산 - 파이썬(Python)

ol-rlo-zl 2023. 4. 3. 20:38

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

def solution(fees, records):
    lst = []
    dic = {}
    result = []
    
    def time(in_time, out_time):
        in_h, in_m = map(int,in_time.split(':'))
        out_h, out_m = map(int,out_time.split(':'))
        if in_m > out_m:
            out_h -= 1
            out_m += 60
        return (out_m-in_m) + 60*(out_h-in_h)
    
    for r in records:
        if r[-2:] == 'IN':
            lst.append(r)
        else:
            for l in lst:
                if l[6:10] == r[6:10]:
                    if l[6:10] in dic:
                        dic[l[6:10]] += time(l[:5],r[:5])
                    else:
                        dic[l[6:10]] = time(l[:5],r[:5])
                    lst.remove(l)
    while lst:
        for l in lst:
            if l[6:10] in dic:
                dic[l[6:10]] += time(l[:5],'23:59')
            else:
                dic[l[6:10]] = time(l[:5],'23:59')
            lst.remove(l)

    res = sorted(dic.items())
    for c, t in res:
        if t <= fees[0]:
            result.append(fees[1])
        else:
            if (t-fees[0]) % fees[2] == 0:
                result.append(fees[1] + (t-fees[0])/fees[2] * fees[3])
            else:
                result.append(fees[1] + (int((t-fees[0])/fees[2])+1) * fees[3])
    return result

결과