[프로그래머스] LV.2 주차 요금 계산 (java)
1. 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92341
2. 풀이 :
hash맵에 차량번호를 key값으로 넣어 IN OUT 체크를 해주면서 주차시간을 다른 map 에 넣어준다.
기존에 차량번호가 이미 등록되었을수 있기 때문에 getOrDefault로 넣어준다.
저장된 해시맵을 차량번호가 낮은 순서대로 돌면서 총 주차요금을 계산해주고 정답 배열에 넣어 return하면 끝!
3. 코드
import java.util.*;
class Solution {
public int[] solution(int[] fees, String[] records) {
int btime = fees[0];
int bfee = fees[1];
int ptime = fees[2];
int pfee = fees[3];
Map<String, String> hm = new HashMap<String, String>();
Map<String, Integer> ans = new HashMap<String, Integer>();
for(String rec : records){
String cnum = rec.substring(6,10);
if(rec.charAt(11) == 'I'){
String intime = rec.substring(0,5);
hm.put(cnum, intime);
} else{
String intime = hm.get(cnum);
String outtime = rec.substring(0,5);
int inhour = Integer.parseInt(intime.substring(0,2));
int outhour = Integer.parseInt(outtime.substring(0,2));
int inmin = Integer.parseInt(intime.substring(3));
int outmin = Integer.parseInt(outtime.substring(3));
int alltime = 0;
if(outmin-inmin < 0){
outhour--;
outmin += 60;
alltime = (outhour-inhour) * 60 + outmin-inmin;
} else{
alltime = (outhour-inhour) * 60 + outmin-inmin;
}
ans.put(cnum, ans.getOrDefault(cnum, 0) + alltime);
hm.remove(cnum);
}
}
for (String cnum : hm.keySet()) {
String intime = hm.get(cnum);
String outtime = "23:59";
int inhour = Integer.parseInt(intime.substring(0,2));
int outhour = Integer.parseInt(outtime.substring(0,2));
int inmin = Integer.parseInt(intime.substring(3));
int outmin = Integer.parseInt(outtime.substring(3));
int alltime = 0;
if(outmin-inmin < 0){
outhour--;
outmin += 60;
alltime = (outhour-inhour) * 60 + outmin-inmin;
} else{
alltime = (outhour-inhour) * 60 + outmin-inmin;
}
ans.put(cnum, ans.getOrDefault(cnum, 0) + alltime);
}
int[] answer = new int[ans.size()];
List<String> keyList = new ArrayList<>(ans.keySet());
keyList.sort((s1, s2) -> s1.compareTo(s2));
int i=0;
for (String key : keyList) {
int alltime = ans.get(key);
int allfee = 0;
if(alltime <= btime){
answer[i] = bfee;
} else{
if((alltime-btime)%ptime != 0){
allfee = bfee + ((alltime-btime)/ptime+1)*pfee;
answer[i] = allfee;
} else{
allfee = bfee + ((alltime-btime)/ptime)*pfee;
answer[i] = allfee;
}
}
i++;
}
return answer;
}
}
'💻 Coding Problems Solving > Hash | HashMap' 카테고리의 다른 글
[LeetCode] First Unique Character in a String (0) | 2023.07.20 |
---|---|
[LeetCode] Group Anagrams (0) | 2023.07.18 |
[프로그래머스] LV.2 방문길이 (자바 java) (0) | 2023.03.12 |
[프로그래머스] LV.2 [3차] 압축 (0) | 2022.04.25 |
[프로그래머스] LV.2 전화번호 목록 (0) | 2022.04.12 |
최근댓글