개발자식

[프로그래머스] 주차 요금 계산 본문

Algorithm/Programmers

[프로그래머스] 주차 요금 계산

밍츠 2022. 9. 27. 15:09

주차요금 계산

https://school.programmers.co.kr/learn/courses/30/lessons/92341

 

프로그래머스

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

programmers.co.kr

 

나의 코드

- 조건대로 하나하나 구현한 형식

- 정답이긴 하지만 입차/출차를 계속 기록하는 방식으로 코드가 길다.

import math
def solution(fees, records):
    answer = []
    indic = {r.split(" ")[1] : [] for r in records}
    outdic = {r.split(" ")[1] : [] for r in records}
    dic = {r.split(" ")[1] : 0 for r in records}

    
    for r in records:
        time, num, check = r.split(" ")
        h = int(time.split(":")[0]) * 60
        m = int(time.split(":")[1]) + h
        
        if check == "IN":
            indic[num].append(m)
        if check == "OUT":
            outdic[num].append(m)
            
    for key,val in outdic.items():
        for i in range(len(val)):
            dic[key]+=outdic[key][i] - indic[key][i]
        
    for key,val in indic.items():
        for i in range(len(indic[key])-len(outdic[key])):
            dic[key]+=(1439 - indic[key][-(i+1)])
    
    
    for key,val in dic.items():
        if val >fees[0]:
            dic[key] = fees[1] + math.ceil((val-fees[0]) / fees[2]) * fees[3]
        else:
            dic[key] = fees[1]
    sorted_dic = sorted(dic.items())
    
    for k in sorted_dic:
        answer.append(k[1])
    
    return answer

 

 

카카오 공식 홈페이지 참고 후 코드 수정

- 입차를 저장하는 dic를 분으로 변경한 시각을 저장하고, 출차를 하면 바로 total 시각을 누적시킨다.

- 여기서 중요한 포인트는 입차 내역을 -1로 변경해준다. 

  • 다시 입차하면 입차 업데이트
  • 다시 입차하지 않으면 -1
from collections import defaultdict
import math

def solution(fees, records):
    answer = []
    in_dic = defaultdict(int)
    total_dic = defaultdict(int)
    
    for r in records:
        time, num, check = r.split(" ")
        h, m = map(int, time.split(":"))
        m += h * 60
        
        if check == "IN":
            in_dic[num] = m
        if check == "OUT":
            total_dic[num] += m - in_dic[num]
            in_dic[num] = -1

    for key, value in in_dic.items():
        if value != -1:
            total_dic[key] += 1439 - value
    
    for key, value in total_dic.items():
        if value > fees[0]:
            total_dic[key] = fees[1] + math.ceil((value - fees[0]) / fees[2]) * fees[3]
        else:
            total_dic[key] = fees[1]
    
    for i in sorted(total_dic.items()):
        answer.append(i[1])
        
    return answer

 

다시 풀어보니까 금방 풀었다.

구현 문제는 코딩테스트에서 조건을 완벽하게 이해하고 바로바로 풀어나가는 것이 다른 문제 풀 때 시간을 확보할 수 있을 것 같다!

Comments