728x90
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
각 차들의 입차, 출차 시간이 주어지고 그 시간을 합해서 총 요금을 계산하는 문제다.
특별한 조건으로는 만약 입차만 기록되어 있고, 출차가 없을 경우 11:59분에 출차했다고 생각하면 된다.
입력으로는
기본 시간, 기본 요금, 추가 시간 단위, 추가 요금
그리고 기록들이 주어진다.
출력으로는
차량번호를 오름차순으로 각 차량의 총 요금을 출력하면 된다.
나는 각 기록에 대해서
- 차량번호를 오름차순으로 정렬하기 위한 ArrayList 한개
- 입차 기록을 저장하기 위한 HashMap 한개
- 각 차량의 총 시간을 저장하기 위한 HashMap 한개
이렇게 3개의 자료구조를 사용했다.
TreeMap 사용하기
여기서 피드백을 해보자면 위에 주황색으로 표시한 자료구조 2개를 하나로 합칠 수 있었다.
TreeMap을 사용하면 차량번호를 항상 오름차순으로 정렬된 상태를 유지한다.
그러면 자료구조를 줄일 수 있고, sort하는 과정도 필요 없어진다.
런타임 에러
처음 제출했을 때 런타임 에러가 발생했는데 이거는 set을 순회하면서 set에서 remove를 해서 발생한 문제였다.
import java.util.*;
class Solution {
public int[] solution(int[] fees, String[] records) {
Map<String, Integer> history = new HashMap<>();
Map<String, Integer> total_time = new TreeMap<>();
for(String record: records){
String[] r = record.split(" ");
int t = changeToMinute(r[0]);
String carNum = r[1];
if(r[2].equals("IN")){
history.put(carNum, t);
total_time.putIfAbsent(carNum, 0);
} else {
int t_in = history.remove(carNum);
total_time.put(carNum, (t-t_in) + total_time.get(carNum));
}
}
for(String car: history.keySet()){
int t_in = history.get(car);
total_time.put(car, (1439-t_in) + total_time.get(car));
}
int[] answer = new int[total_time.size()];
int i=0;
for(String car: total_time.keySet()){
int total_fee = getFee(total_time.get(car), fees);
answer[i++] = total_fee;
}
return answer;
}
private static int getFee(int n, int[] fees){
int BaseTime = fees[0];
int BaseFee = fees[1];
int additionalTime = fees[2];
int additionalFee = fees[3];
if(n <= BaseTime)
return BaseFee;
return BaseFee + (int)(Math.ceil((double)(n - BaseTime) / additionalTime)) * additionalFee;
}
private static int changeToMinute(String word){
String[] arr = word.split(":");
return Integer.parseInt(arr[0]) * 60 + Integer.parseInt(arr[1]);
}
}728x90
'코딩테스트' 카테고리의 다른 글
| 프로그래머스: [PCCP 기출문제] 4번 / 수식 복원하기 (0) | 2025.11.03 |
|---|---|
| 프로그래머스: 완전범죄 (0) | 2025.11.02 |
| 백준 2842 집배원 한상덕 (0) | 2025.02.20 |
| 백준 1719 택배 자바 (0) | 2025.02.20 |
| 백준 2342 Dance Dance Revolution 자바 (1) | 2025.02.19 |