문제 :
https://school.programmers.co.kr/learn/courses/30/lessons/92341
접근 :
- 입력 받은 기록이 In 인 경우에는 HashMap에 차량 번호를 key, 입차 시간을 value로 저장한다.
- 입력 받은 기록이 Out 이면 HashMap을 조회해서 주차된 시간을 계산하여 park_time TreeMap에 저장 후 In에서 해당 데이터를 삭제한다.
- 입력 받은 기록을 모두 처리한 후, In에 차량이 남아있으면 23:59 에 출차된 것으로 시간 계산을 하여 합산한다.
- TreeMap 에서 키를 하나씩 꺼내서 요금을 계산하고 ans 배열에 저장 후 출력한다.
코드 구현 :
import java.util.*;
class Solution {
private int calTime(String in, String out){
return (out.charAt(0)-in.charAt(0))*600 + (out.charAt(1)-in.charAt(1))*60
+ (out.charAt(3)-in.charAt(3))*10 + (out.charAt(4)-in.charAt(4));
}
public int[] solution(int[] fees, String[] records) {
Map<String, String> in = new HashMap<>();
Map<String, Integer> park_time = new TreeMap<>();
//차량 정보 저장 및 출차 시 주차 시간 저장
for(String record : records){
String[] line = record.split(" ");
if(line[2].equals("IN")){
in.put(line[1], line[0]);
continue;
}
park_time.put(line[1], park_time.getOrDefault(line[1],0) + calTime(in.get(line[1]), line[0]));
in.remove(line[1]);
}
//출차 기록이 없는 차량 정산
for(String k : in.keySet()) {
park_time.put(k, park_time.getOrDefault(k, 0) + calTime(in.get(k), "23:59"));
}
// 요금 환산 및 결과 저장
int[] ans = new int[park_time.size()];
int minute;
Iterator<String> iter = park_time.keySet().iterator();
int cnt = 0;
while (iter.hasNext()){
String str = iter.next();
minute = park_time.get(str) - fees[0];
if(minute < 0){
ans[cnt++] = fees[1];
continue;
}
ans[cnt++] = fees[1] + ((minute/fees[2] + (minute%fees[2] == 0 ? 0 :1))*fees[3]);
}
return ans;
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 프로그래머스 택배상자_stack (0) | 2024.07.16 |
---|---|
[JAVA] 숫자 변환하기_DP (1) | 2024.07.12 |
[JAVA] 백준 1103 게임_DP (0) | 2024.07.06 |
[JAVA] 백준 1913 달팽이_탐색 (0) | 2024.07.05 |
[JAVA] 프로그래머스 타겟 넘버_탐색 (0) | 2024.07.04 |