1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
2. 알고리즘
더보기
1. 시뮬레이션 문제로 자료구조를 잘 이용하여 사용
2. 출차 입차 기록 records를 string을 space 기준 파싱
3. 차량번호 기준 오름차순으로 값을 반환해야 하므로 정렬 (기본적으로 records가 출입차 기록이 오름차순으로 됨)
4. 차량 번호당 얼마나 있었는지 총합 계산이 필요하여 dict에 저장
5. dict에 출입차 기록 조회 하는 과정에 출차 기록이 없는경우 23:59 추가
6. 시간 계산하여 fees 조회 하여 연산 및 반환
3. 코드
import math
def time_cal(enter, out):
in_hour, in_minute = map(int, enter.split(':'))
out_hour, out_minute = map(int, out.split(':'))
min_gap = out_minute - in_minute
hour_gap = out_hour - in_hour
if min_gap < 0: # 음수분 인 경우 내림
hour_gap -=1
min_gap = 60 + min_gap
return hour_gap * 60 + min_gap
def solution(fees, records):
answers = []
record = []
for val in records:
record.append(val.split(' '))
record.sort(key=lambda x: (x[1], x[0])) #차량 번호 오름차순 / 시간 내림 차순 정렬
record_dict = {}
for time, number, status in record:
if number not in record_dict:
record_dict[number] = [[time, status]]
else:
record_dict[number].append([time,status])
for key, val in record_dict.items():
time_gap = 0
if len(val)%2 != 0: #출차 기록이 없는 경우 직접 추가
val.append(['23:59', 'OUT'])
for i in range(0,len(val)-1):
enter, status1 = val[i]
out, status2 = val[i+1]
if status1 == 'IN' and status2 == 'OUT': #출차 시간이 있는 경우
time_gap += time_cal(enter, out)
total_fee = fees[1] #기본 요금 설정
if time_gap > fees[0]: #기본 시간보다 더 이용한 경우
total_fee += math.ceil((time_gap - fees[0]) / fees[2]) * fees[3] #단위시간당 단위요금 계산
else: #기본 시간 미만 이용
pass
answers.append(total_fee)
return answers'Algorithm' 카테고리의 다른 글
| [프로그래머스] 방금그곡 (0) | 2026.01.19 |
|---|---|
| [프로그래머스] 미로 탈출 (0) | 2026.01.10 |
| [프로그래머스] 단어 변환 (0) | 2026.01.07 |
| [프로그래머스] 소수 찾기 (1) | 2026.01.07 |
| [프로그래머스] 타겟 넘버 (0) | 2026.01.06 |