[프로그래머스] LV.2 주차 요금 계산 (java)

 

1. 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92341

 

 

2. 풀이 :

hash맵에 차량번호를 key값으로 넣어 IN OUT 체크를 해주면서 주차시간을 다른 map 에 넣어준다.

기존에 차량번호가 이미 등록되었을수 있기 때문에 getOrDefault로 넣어준다.

 

저장된 해시맵을 차량번호가 낮은 순서대로 돌면서 총 주차요금을 계산해주고 정답 배열에 넣어 return하면 끝!

 

3. 코드

import java.util.*;

class Solution {
    public int[] solution(int[] fees, String[] records) {
        int btime = fees[0];
        int bfee = fees[1];
        int ptime = fees[2];
        int pfee = fees[3];
        
        Map<String, String> hm = new HashMap<String, String>();
        Map<String, Integer> ans = new HashMap<String, Integer>();
        
        for(String rec : records){
            String cnum = rec.substring(6,10);
            if(rec.charAt(11) == 'I'){
                String intime = rec.substring(0,5);
                hm.put(cnum, intime);
            } else{
                String intime = hm.get(cnum);
                String outtime = rec.substring(0,5);
                
                int inhour = Integer.parseInt(intime.substring(0,2));
                int outhour = Integer.parseInt(outtime.substring(0,2));
                    
                int inmin = Integer.parseInt(intime.substring(3));
                int outmin = Integer.parseInt(outtime.substring(3));
                
                int alltime = 0;
                if(outmin-inmin < 0){
                    outhour--;
                    outmin += 60;
                    alltime = (outhour-inhour) * 60 + outmin-inmin;
                } else{
                    alltime = (outhour-inhour) * 60 + outmin-inmin;
                }
                ans.put(cnum, ans.getOrDefault(cnum, 0) + alltime);
                
                hm.remove(cnum);
            }
        }
        
        for (String cnum : hm.keySet()) {
	        String intime = hm.get(cnum);
            String outtime = "23:59";
            
            int inhour = Integer.parseInt(intime.substring(0,2));
            int outhour = Integer.parseInt(outtime.substring(0,2));
                    
            int inmin = Integer.parseInt(intime.substring(3));
            int outmin = Integer.parseInt(outtime.substring(3));
                
            int alltime = 0;
            if(outmin-inmin < 0){
                outhour--;
                outmin += 60;
                alltime = (outhour-inhour) * 60 + outmin-inmin;
            } else{
                alltime = (outhour-inhour) * 60 + outmin-inmin;
            }
            ans.put(cnum, ans.getOrDefault(cnum, 0) + alltime);
        }
        
        int[] answer = new int[ans.size()];
        
        List<String> keyList = new ArrayList<>(ans.keySet());
        keyList.sort((s1, s2) -> s1.compareTo(s2));
        
        int i=0;
        for (String key : keyList) {
            int alltime = ans.get(key);
            int allfee = 0;
            if(alltime <= btime){
                    answer[i] = bfee;
            } else{
                if((alltime-btime)%ptime != 0){
                    allfee = bfee + ((alltime-btime)/ptime+1)*pfee;
                    answer[i] = allfee;
                } else{
                    allfee = bfee + ((alltime-btime)/ptime)*pfee;
                    answer[i] = allfee;
                }
            }
            i++;
        }
        return answer;
    }
}
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기