반응형
[문제링크]
https://programmers.co.kr/learn/courses/30/lessons/92341
[설명]
이 문제도 단순하게 구현으로 풀었습니다.
1) Set을 이용하여 차량 번호를 중복없이 저장하였습니다.
2) List<Parking>을 만들어 hour와 minute를 minute에 합쳐 저장하였습니다.
3) Map<String, Integer>를 이용해 해당 차량 번호와 요금을 저장하였습니다. 또한, Map<String, Boolean>을 이용해 해당 차량 번호와 가장 마지막의 상태가 IN인지 OUT인지를 확인하였습니다.
4) 만약 visited가 false일 경우, 해당 위치에서 하나씩 전으로 돌아가며 해당 차량번호가 IN할때의 시간을 찾습니다.
5) 원래의 요금과 방금 시간의 차를 합쳐 3)에 저장합니다.
6) 모든 List를 돌았지만, visited가 IN일 경우 23:59에 출차한 것으로 적용합니다.
7) fees를 이용하여 요금이 얼마나 나오는지 출력합니다.
프로그래머스 2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기 JAVA풀이
import java.util.*;
class Solution {
public int[] solution(int[] fees, String[] records) {
Set<String> set = new TreeSet<>();
List<Parking> list = new LinkedList<>();
for(int i=0;i<records.length;i++){
String[] s = records[i].split(" ");
String[] time=s[0].split(":");
int minute=Integer.parseInt(time[0])*60+Integer.parseInt(time[1]);
String carnum=s[1];
boolean input;
if(s[2].equals("IN")){
input=true;
}else{
input=false;
}
list.add(new Parking(minute, carnum, input));
set.add(s[1]);
}
Iterator<String> iter = set.iterator();
Map<String, Integer> map = new TreeMap<>();
Map<String, Boolean> visited = new TreeMap<>();
while(iter.hasNext()){
String temp=iter.next();
map.put(temp,0);
visited.put(temp, false);
}
int[] answer = new int[set.size()];
for(int i=0;i<list.size();i++){
if(!list.get(i).input){
visited.put(list.get(i).carnum,false);
for(int j=i-1;j>=0;j--){
if(list.get(i).carnum.equals(list.get(j).carnum)){
int tempmin=map.get(list.get(i).carnum);
int temp=list.get(i).minute-list.get(j).minute;
map.put(list.get(i).carnum,temp+tempmin);
break;
}
}
}else{
visited.put(list.get(i).carnum,true);
}
}
Iterator<Map.Entry<String, Boolean>> iters = visited.entrySet().iterator();
while(iters.hasNext()){
Map.Entry<String, Boolean> tempMap = iters.next();
if(tempMap.getValue()){
for(int i=records.length-1;i>=0;i--){
if(tempMap.getKey().equals(list.get(i).carnum)){
int minute=23*60+59-list.get(i).minute;
int temp=map.get(list.get(i).carnum);
map.put(list.get(i).carnum,temp+minute);
break;
}
}
}
}
Iterator<Integer> ite = map.values().iterator();
for(int i=0;i<answer.length;i++){
int minute = ite.next();
if(minute<=fees[0]){
answer[i]=fees[1];
}else{
answer[i]+=fees[1];
minute-=fees[0];
if(minute%fees[2]!=0){
int temp1=minute/fees[2];
answer[i]+=fees[3]*(temp1+1);
}else{
int temp1=minute/fees[2];
answer[i]+=fees[3]*temp1;
}
}
}
return answer;
}
public class Parking{
int minute;
String carnum;
boolean input;
public Parking(int minute, String carnum, boolean input){
this.minute=minute;
this.carnum=carnum;
this.input=input;
}
}
}
궁금하신 부분이나 부족한 점은 댓글로 알려주시면 감사하겠습니다.
반응형
'알고리즘 > 구현' 카테고리의 다른 글
2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기 (0) | 2022.06.05 |
---|---|
BJ_G5_14719_빗물 - Java (0) | 2022.02.27 |
BJ_G5_20055_컨베이어 벨트 위의 로봇 - Java (0) | 2022.02.04 |
BJ_G4_20058_마법사 상어와 파이어스톰 - Java (0) | 2022.01.30 |
BJ_B2_15552_빠른A+B - Java (0) | 2022.01.20 |
댓글