은세고화
뚜렷한 기억보단 흐릿한 잉크를
은세고화
전체 방문자
오늘
어제
  • 분류 전체보기 (95)
    • TDD (2)
      • 학점 산출 프로그램 (2)
    • IT (43)
      • 부스트코스 (18)
      • CS50 (3)
      • 도서추천 알고리즘 (2)
      • 스터디 일정 (3)
      • 스프링 (3)
      • 프로젝트 개발 중 발생한 에러 (8)
      • 웹개발 (3)
      • DB (3)
    • 독서 후기 (12)
      • 도서 (12)
    • e북 (3)
    • 알고리즘 (26)
    • 프로젝트 (6)
      • 향수 (6)
    • 회고 (1)

블로그 메뉴

  • 홈

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
은세고화

뚜렷한 기억보단 흐릿한 잉크를

알고리즘

프로그래머스 주차요금계산 자바

2022. 3. 16. 00:22
반응형

https://programmers.co.kr/learn/courses/30/lessons/92341

 

코딩테스트 연습 - 주차 요금 계산

[180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]

programmers.co.kr

 

생각한 방식

차 번호를 기반으로 조회하므로 자료구조는 맵으로 선택했다.

가장 작은 번호순으로 answer배열에 값을 넣고 출력해야 한다. records를 한 번 순회해야 차번호를 정렬할 수 있으므로 list에 차 번호를 넣어서 이 값을 인덱스로 활용했다.

 

분 배열을 만들어서 list에서 구한 인덱스에 분 값을 다 넣고 price배열에 가격을 계산한 값을 넣었다.

 

잘 한 부분

map을 고른 것과 list를 인덱스로 활용했다.

 

부족한 부분

문제를 잘못 이해해서 minutes배열을 구하지 않았었다. 

다른 코드를 참고하니 시간을 먼저 계산해서 넣었다. 미리 계산하면 for문을 한 번 줄일 수 있다.

또한 TreeMap에 차 번호를 넣고 index변수를 선언해서 순회하면 굳이 list를 새로 생성할 필요 없이 index를 조회할 수 있다.

 

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class Solution {
	
	public static void main(String[] args){
		int[] n = {180, 5000, 10, 600};
		String[] n2 = {"05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"};
		
		//System.out.println(solution(4578, n));
		System.out.println(solution(n, n2));
	}
	
    public static int[] solution(int[] fees, String[] records){
        int[] answer;
        Map<String, String> map = new HashMap<String, String>();
        ArrayList<String> list = new ArrayList<>();
        
        for (String record : records) {
        	String[] item = record.split(" ");
			if(!list.contains(item[1])) list.add(item[1]);
		}
        Collections.sort(list);
        
        answer = new int[list.size()];
        int[] minutes = new int[list.size()];
        
        for (String record : records) {
			String[] item = record.split(" ");
			if(item[2].equals("IN")) {
				map.put(item[1], item[0]);
			}else {
				String[] inTimes = map.remove(item[1]).split(":");
				String[] outTimes = item[0].split(":");
				
				//분으로 변경
				int inTimeHour = Integer.parseInt(inTimes[0]) * 60;
				int outTimeHour = Integer.parseInt(outTimes[0]) * 60;
				//차를 구하고 요금을 계산함
				int minute = (outTimeHour + Integer.parseInt(outTimes[1])) - (inTimeHour + Integer.parseInt(inTimes[1]));

				minutes[list.indexOf(item[1])] += minute;
			}
		}
        
        for (String carNum : map.keySet()) {
			//남아있는 차 번호
        	int lastTime = 1439;
        	String[] inTimes = map.get(carNum).split(":");
        	int inTime = Integer.parseInt(inTimes[0]) * 60 + Integer.parseInt(inTimes[1]);
        	minutes[list.indexOf(carNum)] += lastTime - inTime;
		}
        
        for (int i = 0; i < minutes.length; i++) {
        	int price = 0;
        	if(minutes[i] <= fees[0]) price = fees[1];
        	else {
            	price = fees[1] + ((int)Math.ceil((double)(minutes[i] - fees[0]) / fees[2]) * fees[3]);
            }
        	answer[i] = price;
		}
        return answer;
    }
}

 

반응형
저작자표시 (새창열림)

'알고리즘' 카테고리의 다른 글

백준 2580 스도쿠 자바  (0) 2022.03.19
백준 9663 N-Queen 자바  (0) 2022.03.17
백준 2470 자바 드래곤 커브  (0) 2022.03.09
백준 18870 자바  (0) 2022.03.09
백준 2108 자바  (0) 2022.03.08
    '알고리즘' 카테고리의 다른 글
    • 백준 2580 스도쿠 자바
    • 백준 9663 N-Queen 자바
    • 백준 2470 자바 드래곤 커브
    • 백준 18870 자바
    은세고화
    은세고화

    티스토리툴바