반응형
📖 문제
📃 코드
import math
# fees = [120, 0, 60, 591]
# records = ["16:00 3961 IN","16:00 0202 IN","18:00 3961 OUT","18:00 0202 OUT","23:58 3961 IN"]
# result = [0, 591]
def solution(fees, records):
answer = []
inTime = [0] * 10000
isIn = [0] * 10000
sumT = [0] * 10000
for record in records:
a, b, c = record.split()
H, M = a.split(":")
if c == "IN":
# record for initTime -> inTime[3961] = H*60 + M
inTime[int(b)] = int(H)*60 + int(M)
isIn[int(b)] = 1
else:
# record for sumTime -> sumT[3961] = inTime[3961] - H*60 + M
# IMPORTANT append time for twice input
sumT[int(b)] += int(H)*60 + int(M) - inTime[int(b)]
isIn[int(b)] = 0
for i in range(10000):
# there is no output vehicle
if isIn[i] > 0:
sumT[i] += 23*60+59 - inTime[i]
isIn[i] = 0
for i in range(10000):
if sumT[i] > 0:
# math.ceil((sumT[i] - fees[0])/fees[2]) can be negative, so compare with 0
answer.append(fees[1] + max(math.ceil((sumT[i] - fees[0])/fees[2]), 0)*591)
return answer
fees = [120, 0, 60, 591]
records = ["16:00 3961 IN", "16:00 0202 IN",
"18:00 3961 OUT", "18:00 0202 OUT", "23:58 3961 IN"]
print(solution(fees, records))
✔️ 복습
import math
def solution(fees, records):
answer = []
inTime = [0 for _ in range(10000)]
isIn = [0 for _ in range(10000)]
sumTime = [0 for _ in range(10000)]
for record in records:
time, number, state = record.split(" ")
H, M = time.split(":")
if state == "IN":
inTime[int(number)] = int(H)*60+int(M)
isIn[int(number)] = 1
else:
sumTime[int(number)] += (int(H)*60+int(M)) - inTime[int(number)]
isIn[int(number)] = 0
for i in range(10000):
if isIn[i] == 1:
sumTime[i] += (23*60+59) - inTime[i]
for i in range(10000):
if sumTime[i] > 0:
answer.append(fees[1] + max(math.ceil((sumTime[i]-fees[0])/fees[2]),0)*fees[3])
return answer
🗝️ 요약
[개념]
파이썬에서는 배열을 list로 사용한다.
split()을 적극 활용해서 값을 편집하자.
[활용]
고유한 data에 대해서 여러 값을 처리하고 싶다면 배열을 사용하면 된다.
고유한 data기 때문에 index를 data로 사용하면 된다.
boolean값을 사용할 수 있게 똑같은 크기의 배열을 사용할 수도 있다.
'Study & Project ✏️ > 프로그래머스 PCCP 공부 📅' 카테고리의 다른 글
[프로그래머스] BFS 복습 및 실습문제(송아지 찾기) 풀이 - 파이썬 (0) | 2022.11.12 |
---|---|
[프로그래머스] DFS 복습 및 실습문제(피로도) 풀이 - 파이썬 (0) | 2022.11.12 |
[프로그래머스] Sorting&Greedy 복습 및 실습문제(단속카메라) 풀이 - 파이썬 (0) | 2022.11.12 |
[프로그래머스] Two pointers 복습 및 실습문제(보석쇼핑) 풀이 - 파이썬 (0) | 2022.11.10 |
[프로그래머스] Hash 자료구조 복습 및 실습문제(신고 결과 받기) 풀이 - 파이썬 (0) | 2022.11.08 |