문제
https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 개요
주어진 차량의 입출차 기록을 기반으로 주차 요금을 계산하는 문제입니다. 기본 시간과 요금, 단위 시간과 요금이 제공되며, 각 차량의 총 주차 시간을 계산한 후 요금 정책에 따라 최종 주차 요금을 산출해야 합니다.
접근 방법
단순 구현
코드
import java.util.*;
class Solution {
static Map<String, Integer> map = new HashMap<>();
static Map<String, Integer> info = new HashMap<>();
static Set<String> carNumbers = new HashSet<>();
public int[] solution(int[] fees, String[] records) {
for(int i=0; i<records.length; i++) {
String[] arr = records[i].split(" ");
cal(arr);
}
List<String> list = new ArrayList<>(carNumbers);
Collections.sort(list);
int[] answer = new int[list.size()];
for(int i=0; i<list.size(); i++) {
int time = map.getOrDefault(list.get(i), 0);
int bucket = info.getOrDefault(list.get(i), -1);
if(bucket >= 0) {
time += calLastTime(bucket);
}
answer[i] = timeToMoney(fees, time);
}
return answer;
}
public void cal(String[] arr) {
String carNum = arr[1];
int time = StringToTime(arr[0]);
if(arr[2].equals("IN")) {
info.put(carNum, time);
carNumbers.add(carNum);
} else {
int inTime = info.get(carNum);
info.remove(carNum);
time -= inTime;
map.put(carNum, map.getOrDefault(carNum, 0) + time);
}
}
public int timeToMoney(int[] fees, int time) {
int money = 0;
if(time > fees[0]) {
time -= fees[0];
money += fees[1];
} else {
return fees[1];
}
time = time%fees[2] > 0 ? time/fees[2]+1 : time/fees[2];
money += time * fees[3];
return money;
}
public int StringToTime(String s) {
String[] arr = s.split(":");
return Integer.parseInt(arr[0]) * 60 + Integer.parseInt(arr[1]);
}
public int calLastTime(int n) {
int time = 23*60 + 59;
time -= n;
return time;
}
}
'문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 기지국 설치 - Java (1) | 2024.12.19 |
---|---|
[프로그래머스] 경주로 건설 - Java (0) | 2024.12.18 |
[프로그래머스] 보석 쇼핑 - Java (0) | 2024.12.03 |
[프로그래머스] 불량 사용자 - Java (1) | 2024.12.02 |
[프로그래머스] 단속카메라 - Java (0) | 2024.12.02 |