https://school.programmers.co.kr/learn/courses/30/lessons/92341
1. Car 클래스를 생성해준다.
class Car {
int number;
int hour;
int min;
int sum;
public Car(int number, int hour, int min) {
super();
this.number = number;
this.hour = hour;
this.min = min;
}
public Car(int number, int sum) {
super();
this.number = number;
this.sum = sum;
}
}
2. 입차("IN") 를 HashMap<차번호, Car 정보> hm로 담는다.
3. 출차("OUT") 인 경우는 hm에서 car 객체를 가져와 주차시간 계산한다.
4. 계산한 주차시간은 다시 HashMap<차번호, 주차누적시간>으로 담는다.
5. hm 이 모두 비어있는 지를 확인한다.
import java.util.*;
class Car {
int number;
int hour;
int min;
int sum;
public Car(int number, int hour, int min) {
super();
this.number = number;
this.hour = hour;
this.min = min;
}
public Car(int number, int sum) {
super();
this.number = number;
this.sum = sum;
}
}
public class Main {
static int[] answer;
public int[] solution(int[] fees, String[] records) {
//입차
HashMap<Integer, Car> hm = new HashMap<Integer, Car>();
//총 누적 시간
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < records.length; i++) {
String str = records[i];
int hh = Integer.parseInt(str.substring(0, 2));
int mm = Integer.parseInt(str.substring(3, 5));
int carNum = Integer.parseInt(str.substring(6, 10));
String checkOut = str.substring(11);
if(checkOut.equals("IN")) {
Car car = new Car(carNum, hh, mm);
hm.put(carNum, car);
}else {
Car car = hm.get(carNum);
hm.remove(carNum);
int time = calTime(car.hour, car.min, hh, mm);
map.put(carNum, map.getOrDefault(carNum, 0)+time);
}
}
if(!hm.isEmpty()) {
for(int carNum : hm.keySet()) {
Car car = hm.get(carNum);
int time = calTime(car.hour, car.min, 23, 59);
map.put(carNum, map.getOrDefault(carNum, 0)+time);
}
}
ArrayList<Car> list = new ArrayList<Car>();
for(int carNum : map.keySet()) {
int time = map.get(carNum);
int sum = fees[1];
if(time > fees[0]) {
time -= fees[0];
int cnt = (time)/fees[2];
if(time%fees[2] != 0) cnt++;
sum += (fees[3] * cnt);
};
list.add(new Car(carNum, sum));
}
Collections.sort(list, new Comparator<Car>() {
@Override
public int compare(Car o1, Car o2) {
// TODO Auto-generated method stub
return o1.number - o2.number;
}
});
answer = new int[list.size()];
for(int i = 0; i < list.size(); i++) {
answer[i] = list.get(i).sum;
}
return answer;
}
private int calTime(int hour, int min, int hh, int mm) {
if(mm < min) {
hh -= 1;
mm += 60;
}
int time = (hh - hour) * 60 + (mm-min);
return time;
}
}
'코딩테스트 > programmers' 카테고리의 다른 글
[level2] 2018 KAKAO BLIND RECRUITMENT[3차] 압축 JAVA (0) | 2022.11.16 |
---|---|
[level2] [1차] 뉴스 클러스터링 JAVA (0) | 2022.11.16 |
[JAVA] 3진법 뒤집기 (0) | 2022.09.16 |
문자열 내 마음대로 정렬하기 (0) | 2022.08.24 |
[2019 카카오 개발자 겨울 인턴십]튜플 - java (0) | 2022.08.16 |