요르딩딩
프로그래머스 : 주차 요금 계산 본문
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/92341
이번문제를 풀면서 다시한번 알아두면 좋은 기능들을 확인해볼 수 있었다.
1. map에 key기준 오름차순으로 정렬해주는 TreeMap
2. map에 누적값을 넣을때 사용하면 좋은 map.getOrDefault()
3. list<Integer> -> int[] 변환하는 list.stream().mapToInt(i -> i).toArray();
또한 이 문제에서 시간, 분을 계산할때는 모두 분으로 만든 후 출차 - 입차를 하면 주차한 시간을 구할 수 있다.
구현하는데는 큰 문제는 없었다. 다만 풀이 시간이 더 적게 걸릴 수 있도록 노력해야겠다.
import java.util.*;
class Solution {
@SuppressWarnings("unchecked")
public int[] solution(int[] fees, String[] records) {
int[] answer = {};
ArrayList<Integer> answerList = new ArrayList<Integer>();
HashMap<String, Object> map = new HashMap<String, Object>();
TreeMap<String, Object> mapTime = new TreeMap<String, Object>(); //트리맵 키 순으로 정렬 *****
for (String r : records) {
String[] tmpArr = r.split(" ");
String time = tmpArr[0];
String carNum = tmpArr[1];
if (!map.containsKey(carNum)) {
map.put(carNum, new ArrayList<String>());// 시간배열 선언
mapTime.put(carNum, 0);
}
((ArrayList<String>) map.get(carNum)).add(time); // 시간 넣어주기
}
for (String k : map.keySet()) {
ArrayList<String> timeList = (ArrayList<String>) map.get(k);
for (int i = 0; i < timeList.size(); i += 2) { // 2씩증가
String inTime = "";
String outTime = "";
if (i == timeList.size() - 1) { // 마지막 out 없을 경우
inTime = timeList.get(i);
outTime = "23:59"; // 23:59
} else {
inTime = timeList.get(i);
outTime = timeList.get(i + 1);
}
String[] inTimeArr = inTime.split(":");
String[] outTimeArr = outTime.split(":");
int inHour = Integer.parseInt(inTimeArr[0]);
int outHour = Integer.parseInt(outTimeArr[0]);
int inMin = Integer.parseInt(inTimeArr[1]);
int outMin = Integer.parseInt(outTimeArr[1]);
int totTime = ((outHour * 60) + outMin) - ((inHour * 60) + inMin); //(출자시간*60 +출차분) - (입차시간*60 + 입차분)
mapTime.put(k, (int)mapTime.getOrDefault(k, 0) + totTime); // 누적시간****
}
}
for(String mt : mapTime.keySet()) {
int totTime = (int) mapTime.get(mt);
int calMoney=0;
if(totTime < fees[0]) {
calMoney = fees[1];
}else {
calMoney = (int) (fees[1] + Math.ceil(((double)totTime - fees[0]) / fees[2]) * fees[3]);
}
answerList.add(calMoney);
}
answer =answerList.stream().mapToInt(i -> i).toArray(); // List<integer> -> int[]로 변환*****
return answer;
}
}
728x90
반응형
'[코딩테스트] > 문제풀이' 카테고리의 다른 글
프로그래머스 : 124나라 (규칙찾기) (0) | 2022.04.19 |
---|---|
프로그래머스 : 파일명 정렬 (comparator , 정규식) (0) | 2022.04.18 |
프로그래머스 : 멀쩡한 사각형 (최대공약수) (0) | 2022.04.11 |
백준 : 2563 : 색종이 (구현) (0) | 2022.04.01 |
백준 : 14501 : 퇴사 (DP) (0) | 2022.04.01 |
Comments