Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 추천 시스템
- 코딩테스트
- 백준
- pytorch
- TF-IDF
- 머신러닝
- Cosine-similarity
- Overfitting
- SGD
- 분산 시스템
- 시각화
- 협업 필터링
- wordcloud
- 딥러닝
- 코테
- 파이썬
- 웹스크래핑
- selenium
- 추천시스템
- recommendation system
- codingtest
- 웹크롤링
- Python
- 데이터
- 데이터 엔지니어링
- 프로그래머스
- Tensor
- 부스트캠프
- coursera
- 알고리즘
Archives
- Today
- Total
개발자식
[프로그래머스] 주차 요금 계산 본문
주차요금 계산
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
다시 풀어보니까 금방 풀었다.
구현 문제는 코딩테스트에서 조건을 완벽하게 이해하고 바로바로 풀어나가는 것이 다른 문제 풀 때 시간을 확보할 수 있을 것 같다!
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 탐욕법_구명보트 (2) | 2023.05.19 |
---|---|
[프로그래머스] 파괴되지 않은 건물 (0) | 2022.09.07 |
[프로그래머스] 약수의 개수와 덧셈 (0) | 2022.08.22 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.08.22 |
[프로그래머스] 키패드 누르기 (0) | 2022.08.22 |
Comments