티스토리 뷰
<나의 풀이>
- 2중for문이 있다. 최대한 줄이는게 좋겠다.
<오답노트>
- 딕셔너리 사용법
import math
n_time = {}
def car_f(n,f):
global n_time
if n in n_time:
n_time[n] = n_time[n] + f
else:
n_time[n] = f
def solution(fees, records):
answer = []
at, af, at2, af2 = fees
for i in range(len(records)):
record = records[i]
t, n, w = record.split()
h, m = map(int,t.split(':'))
if w == 'IN':
for j in range(len(records)):
record2 = records[j]
t2, n2, w2 = record2.split()
h2, m2 = map(int,t2.split(':'))
if n == n2 and w2 == 'OUT' and i<=j:
car_f(int(n),(h2*60+m2)-(h*60+m))
break
if record2 == records[-1] and n2 != 'OUT':
car_f(int(n),(23-h)*60 + (59-m))
for num,NT in n_time.items():
if NT-at <= 0:
n_time[num] = af
else:
n_time[num] = af + (math.ceil((NT-at)/at2) * af2)
r = list(dict(sorted(n_time.items())).values())
return r
<다른 사람 풀이>
- for문을 돌면서 딕셔너리에 total_time, time, status 를 저장한다.
import math
def solution(fees, records):
check = {}
for record in records:
time, number, status = record.split()
time = time.split(':')
time = int(time[0])*60 + int(time[1])
if number not in check:
check[number] = (0, time, status)
if status == 'IN':
check[number] = (check[number][0], time, status)
elif status == 'OUT':
total_time, in_time, _ = check[number]
total_time += time - in_time
check[number] = (total_time, time, status)
result = {}
for number in check.keys():
total_time, time, status = check[number]
if status == 'IN':
total_time += 1439 - time
fee = fees[1]
if total_time <= fees[0]:
result[number] = fee
else:
fee = fee + math.ceil((total_time - fees[0]) / fees[2]) * fees[-1]
result[number] = fee
return list(map(lambda x : x[1], sorted(result.items())))
'코딩테스트 > 백준 알고리즘' 카테고리의 다른 글
[프로그래머스] LV.3 다단계 칫솔 판매 - python (0) | 2022.04.21 |
---|---|
[프로그래머스] LV.3 <카카오> 양과 늑대 - python (0) | 2022.04.16 |
[백준] 💚1504 <최단거리> 암호만들기 - python (0) | 2022.04.13 |
[백준] 💚1759 <순열/조합> 암호만들기 - python (0) | 2022.04.12 |
[백준] 11404 <플로이드> 플로이드 - python (0) | 2022.04.11 |