https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
class Solution {
public int[] solution(int[] fees, String[] records) {
List<Car> carList = new ArrayList<>();
for(String record : records) {
String[] parts = record.split(" ");
String time = parts[0];
String carName = parts[1];
String inOut = parts[2];
for(int i = 0 ; i <= carList.size() ; i++) {
if(carList.size() == 0) {
carList.add(new Car(carName, time));
break;
}
if(carList.get(i).name.equals(carName)) {
if(inOut.equals("IN")) {
carList.get(i).whenPark(time);
} else {
carList.get(i).howPark(time);
}
break;
} else if(i == carList.size() - 1) {
carList.add(new Car(carName, time));
break;
}
}
}
Collections.sort(carList);
int[] answer = new int[carList.size()];
int idx = 0;
for(Car car : carList) {
if(car.parkFlag) car.howPark("23:59");
answer[idx] = parkCost(car.parkingMin, fees[0], fees[1], fees[2], fees[3]);
idx ++;
}
for(int a : answer) {
System.out.println(a);
}
return answer;
}
// 주차 비용 계산
int parkCost(int time, int baseTime, int baseCost, int unitTime, int unitCost) {
if(time <= baseTime) return baseCost;
int midResult = (time - baseTime) % unitTime > 0 ? (time - baseTime) / unitTime + 1 : (time - baseTime) / unitTime;
return baseCost + midResult * unitCost;
}
}
class Car implements Comparable<Car> {
String name;
int inMin;
int parkingMin;
boolean parkFlag;
Car(String name, String inTime) {
this.name = name;
whenPark(inTime);
this.parkingMin = 0;
this.parkFlag = true;
}
// 주차 시작 시간 입력
void whenPark(String IN) {
String[] parts = IN.split(":");
int h = Integer.parseInt(parts[0]);
int m = Integer.parseInt(parts[1]);
inMin = h * 60 + m;
this.parkFlag = true;
}
// (출차 후) 주차시간 입력
void howPark(String OUT) {
String[] parts = OUT.split(":");
int h = Integer.parseInt(parts[0]);
int m = Integer.parseInt(parts[1]);
int outMin = h * 60 + m;
parkingMin += outMin - inMin;
this.parkFlag = false;
}
// answer에 넣기위한 차량 정렬
@Override
public int compareTo(Car car) {
for(int i = 0 ; i < 4; i++) {
if(car.name.charAt(i) < name.charAt(i)) return 1;
else if(car.name.charAt(i) > name.charAt(i)) return -1;
}
return 0;
}
}
Coparable을 implements하여 객체 리스트를 정렬하는 방법
Collections.sort() 메서드는 객체를 정렬할 때, 해당 객체의 Comparable을 구현한 compareTo() 메서드를 참조하여, 정렬 순서를 결정합니다. 따라서, Comparable interface를 구현하고, compareTo() 메서드 안에 정렬 기준이 정의된다면, Collections.sort() 메서드를 사용하여 객체를 정렬할 수 있습니다.
출처 : https://hianna.tistory.com/569