https://programmers.co.kr/learn/courses/30/lessons/92341
- 하루동안(0분~23*60+59분) 주차장에 들어오고 나가거나, 이후에 안 나간 차에 대한 이용시간을 모두 카운트 한 뒤 주차요금 공식에 따라 계산한 요금값을 차량번호가 낮은 순서대로 정렬하면 된다.
- 차량번호순으로 정렬하기 위해 트리맵을 이용하였다.
import java.util.*;
class Solution {
public int[] solution(int[] fees, String[] records) {
List<Integer> ans = new ArrayList<>();
Map<String, Integer> parkTime = new HashMap<>();
Map<String, Integer> totalTime = new TreeMap<>();
int basicTime = fees[0];
int basicFee = fees[1];
int unitTime = fees[2];
int unitFee = fees[3];
for(String s: records) {
StringTokenizer st = new StringTokenizer(s, ": ");
int t = Integer.parseInt(st.nextToken()) * 60 + Integer.parseInt(st.nextToken());
String num = st.nextToken();
String cmd = st.nextToken();
if(cmd.equals("IN")) parkTime.put(num, t);
else {
int before = totalTime.getOrDefault(num, 0);
totalTime.put(num, before + t - parkTime.get(num));
parkTime.put(num, -1);
}
}
for(String num: parkTime.keySet()) {
int t = parkTime.get(num); // in 시간
if(t != -1) {
int before = totalTime.getOrDefault(num, 0);
totalTime.put(num, before + 23*60+59 - t);
}
}
for(String num: totalTime.keySet()) {
int d = totalTime.get(num);
int rate = basicFee;
if(d > basicTime) {
rate += ((int)Math.ceil((double)(d - basicTime) / unitTime)) * unitFee;
}
ans.add(rate);
}
return ans.stream().mapToInt(Integer::intValue).toArray();
}
}
'Algorithm > programmers' 카테고리의 다른 글
2022 Kakao blind 92343 - 양과 늑대(트리, 백트래킹 or dp) - Java, C++ 풀이 (0) | 2022.03.24 |
---|---|
2022 Kakao blind 92342 - 양궁대회(백트래킹 or 그리디+완전탐색)) - Java 풀이 (0) | 2022.03.24 |
2022 Kakao blind 92335 - k진수에서 소수 개수 구하기(진법변환, 소수판별, 문자열, 구현) - Java 풀이 (0) | 2022.03.24 |
2022 Kakao blind 92334 - 신고 결과 받기(해쉬, 구현) - Java 풀이 (0) | 2022.03.24 |
프로그래머스 고득점 Kit 하루만에 뽀개기 - 8. 깊이/너비 우선검색(DFS,BFS) C++ 풀이 (0) | 2022.03.19 |