[파이썬] 프로그래머스 : 주차 요금 계산 (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
코멘트
쉬운 구현문제. 계산 과정도 문제에서 보여줘서 그냥 하란대로 하면 끝
'Algorithm > Simulation' 카테고리의 다른 글
[파이썬] 백준 23290 : 마법사 상어와 복제 (골드1) (0) | 2023.08.11 |
---|---|
[파이썬] 백준 21611 : 마법사 상어와 블리자드 (골드1) (0) | 2023.08.02 |
[파이썬] 백준 20056 : 마법사 상어와 파이어볼 (골드4) (0) | 2023.07.24 |
[파이썬] 백준 16236 : 아기 상어 (골드3) (0) | 2023.07.18 |
[파이썬] 백준 21610 : 마법사 상어와 비바라기 (골드5) (0) | 2023.07.02 |
[파이썬] 백준 1475 : 방 번호 (실버5) (0) | 2023.05.29 |
[파이썬] 백준 1213: 팰린드롬 만들기 (실버3) (0) | 2023.05.09 |
댓글