문제
https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
HashMap을 2개 사용하여 풀이했다
map - 주차번호가 in / out 판단해주는 hashMap => map에 주차번호가 있으면 in / 없으면 out
- (주차번호, 입차할때의 시간) 으로 저장
parking - 주차번호에 대해 전체 시간 구해주는 hashMap
- (주차번호, 전체 시간) 으로 저장
1. records [] 에 대해 for문을 돌면서 다음을 수행
1) map에 주차번호를 저장
2) map에 주차번호가 있으면 출차부터 입차까지의 시간을 구해줌
1 - parking에 주차번호가 없으면 걍 저장
2 - parking에 주차번호 있으면 기존 시간에 새로 구한 시간 더해줌
2. map에 남아있는 주차번호들은 출차시간이 모두 23:59 이기 때문에 다 계산해서 parking에 넣어줌
3. parking key에 대해 sort
4. parking에 대해 sorting 된 key로부터 value를 가져와서 주차요금 계산
코드
import java.util.*;
class Solution {
public List<Integer> solution(int[] fees, String[] records) {
HashMap<String, String> map = new HashMap<>();
HashMap<String, Integer> parking = new HashMap<>();
for(int i=0;i<records.length;i++){
String temp [] = records[i].split(" ");
if(map.containsKey(temp[1])){
Integer inHour = Integer.parseInt(map.get(temp[1]).split(":")[0]);
Integer inMinute = Integer.parseInt(map.get(temp[1]).split(":")[1]);
Integer outHour = Integer.parseInt(temp[0].split(":")[0]);
Integer outMinute = Integer.parseInt(temp[0].split(":")[1]);
map.remove(temp[1]);
int minutes = 0;
minutes = outHour > inHour ? (outHour - inHour) * 60 : 0;
minutes += outMinute - inMinute;
if(parking.containsKey(temp[1]))
parking.put(temp[1], minutes + parking.get(temp[1]));
else parking.put(temp[1], minutes);
}
else{
map.put(temp[1], temp[0]);
}
}
for(String key : map.keySet()){
Integer inHour = Integer.parseInt(map.get(key).split(":")[0]);
Integer inMinute = Integer.parseInt(map.get(key).split(":")[1]);
int minutes = (23-inHour)*60 + 59-inMinute;
if(parking.containsKey(key))
parking.put(key, minutes + parking.get(key));
else parking.put(key, minutes);
}
List<String> keySet = new ArrayList<>(parking.keySet());
Collections.sort(keySet);
List<Integer> answer = new ArrayList<>();
for(String key : keySet){
int allMinutes = parking.get(key);
if(allMinutes <= fees[0]) {
answer.add(fees[1]);
}
else {
int parkingFee = fees[1] + (int)(Math.ceil((float)(allMinutes - fees[0]) / fees[2])) * fees[3];
answer.add(parkingFee);
}
}
return answer;
}
}