본문 바로가기
Algorithm/Simulation

[파이썬] 프로그래머스 : 주차 요금 계산 (Lv.2)

by 베짱이28호 2023. 7. 11.

[파이썬] 프로그래머스 : 주차 요금 계산 (Lv.2)

 

 

프로그래머스

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

programmers.co.kr

 


풀이

방향성 생각

시간 계산만 잘 해서 구현해주면 된다.

딕셔너리에 차량번호에 출입시간 리스트를 만들고 출입시간을 계속 넣는다.

출입시간 리스트가 홀수면 23:59에 나갔다는 의미이다.

 

시간 계산 : 시*60 + 분으로 계산

딕셔너리를 만든 후 차량번호가 작은 순으로 출력해야하니 리스트를 따와서 차량번호 순으로 정렬

 

출입시간 리스트가 짝수면 2개씩 묶어서 계산. 홀수면 마지막 시간은 따로 계산.

 

전체코드

import math

def solution(fees,records):
    table = {}
    for info in records: # 차량 번호에 맞는 시간 분 단위로 변환해서 넣기
        time,number,now = info.split()
        if number not in table:
            table[number] = [int(time[:2])*60 + int(time[-2:])]
        else :
            table[number].append((int(time[:2])*60 + int(time[-2:])))
    
    temp = list(table.items()) # 정답 출력 시 차량 번호 작은거 부터 출력. 오름차순으로 정렬
    temp.sort() # (차량번호,출입시간 리스트)
    
    end = 23*60+59
    answer = []
    for number,time_info in temp:
        p,q = divmod(len(time_info),2)
        use = 0
        if q: use += end-time_info[-1] # 홀수인 경우 마지막 계산해주기
        for i in range(p): # 2개씩 짝지어서 출입 계산
            use += time_info[2*i+1]-time_info[2*i]
        if use > fees[0]: # 기본시간 넘을경우
            answer.append(fees[1]+math.ceil((use-fees[0])/fees[2])*fees[3])
        else : # 기본시간 이하인 경우
            answer.append(fees[1])
    return answer

코멘트

쉬운 구현문제. 계산 과정도 문제에서 보여줘서 그냥 하란대로 하면 끝

댓글