- 주차요금계산 - 22kakao blind recruitment - python2023년 06월 16일
- 2료일
- 작성자
- 2023.06.16.:17
https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제해석
fees에 순서대로기본시간, 기본요금, 추가시간당, 추가요금으로 나오고 records에는 몇시에 어떤차가 들어오거나 나갔는지의 기록이 있다.
먼저 레코드들의 정보를 쪼개서 cardict에 key값으로는 차번호가 value에는 시간과 in,out상태를 넣어주었다.
첫번째 for문을 다 돌게 되면 키값에 해당하는 모든 history가 value로 이차배열이 들어가게 된다.
그 후 문제에서 보면 차가 들어오는거만 있고 나가는게 없다면 그건 23:59분을 기준으로 out을 해준다고 했다. 그래서 해당 차번호에 해당하는 value이차 배열의 마지막것이 in으로 끝난다면 23:59,out을 추가해주었다.
그 후 값 키에 해당하는 value를 for문으로 돌면서 시간 뒤에 in으로 끝나면 temp에 더해주고
out이면 전체 분에서 이전에 나온 in시간 분을 빼주면 그 사이의 시간을 구해줄 수 있기에 그것들을 result라는 배열에 넣어주었다.
해당하는 키가 모든 value를 다 돌면 result배열의 원소들의 합을 구해주고 만약 기본시간보다 많다면 초과시간당 가격을 매겨 price에 더해준다. 총 price를 해당하는 차번호와 함께 answer배열에 넣어주고 그 차번호를 기준으로 정렬을 한후 거기서 가격만 뽑아야하기에 realanswer이라는 배열을 하나 더만들어서 뽑아주었다.
from math import ceil def hourtomintues(hour): h,m = map(int, hour.split(":")) return h*60 + m def solution(fees, records): answer = [] cardict = {} for i in records: time, carnum, carstate = i.split() if carnum in cardict: cardict[carnum].append([time, carstate]) else: cardict[carnum] = [[time,carstate]] for j in cardict: if cardict[j][-1][-1] == "IN": cardict[j].append(["23:59","OUT"]) temp = 0 price = fees[1] result = [] for k in cardict[j]: if k[-1] == "IN": temp += hourtomintues(k[0]) else: temp = hourtomintues(k[0]) - temp result.append(temp) temp = 0 a = sum(result) if a > fees[0]: price += ceil((a-fees[0]) / fees[2]) * fees[3] answer.append([j,price]) answer.sort(key=lambda x:x[0]) realanswer = [] for i in answer: realanswer.append(i[1]) return realanswer
시간복잡도는 O(n^2)
'알고리즘' 카테고리의 다른 글
파괴되지 않은 건물 - pYthon (0) 2023.06.19 양궁대회- 22KAKAO Blind(python) (0) 2023.06.16 등산코스정하기-python(kakao22 season) (0) 2023.06.12 두 큐 합 같게 만들기 - Python으로 풀이 (0) 2023.06.11 성격유형검사하기-2022kakao 코테 (2) 2023.06.10 다음글이전글이전 글이 없습니다.댓글