본문 바로가기

프로그래머스

LV2 - 호텔 대실 (Java)

 


 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/155651

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

우선 생각났던건 시작시간부터, 끝시간까지 1분 단위로 카운트를 하는것이었다.

그 시간동안 몇개의 객실이 필요한지 파악하고 00:00 부터 23:59까지 모두 돈다음 가장 큰 수를 리턴하면 될거라 생각했다.

 

컨셉은 이렇게 잡았고, 초반에는 진짜 시간처럼 계산을 했었는데, 분기처리도 너무 까다롭고 퇴실 시간 이후 10분 처리도 까다로워서 생각을 바꿨다.

 

시간에 * 60 을 하고 분을 더하는 방식으로 숫자값을 만들었고, 거기에다가 9분을 더해서 끝나는 시간을 지정했다. (10분부터는 객실을 사용할 수 있다.)

 

이런식으로 시작시간 ~ 끝시간까지 1 단위로 map에 count를 해주었고, 마지막에 00시00분부터 23시59분 까지 순회하면서 가장 큰 값을 반환했다.

코드

import java.util.*;

class Solution {
    public Map<Integer, Integer> map = new HashMap<>();

    public void setMap(int s, int e){
        for(int i=s; i<=e; i++){
            map.put(i, map.getOrDefault(i, 0) + 1);
        }
    }
    public int solution(String [][] times) {
        int answer = 0;
        for(int l=0; l<times.length; l++) {

            String start = times[l][0];
            String end = times[l][1];

            int start_h = Integer.parseInt(start.split(":")[0]);
            int start_m = Integer.parseInt(start.split(":")[1]);
            int end_h = Integer.parseInt(end.split(":")[0]);
            int end_m = Integer.parseInt(end.split(":")[1]);

            int startTime = start_h * 60 + start_m;
            int endTime = end_h * 60 + end_m + 9;

            setMap(startTime, endTime);
        }

        for(int i=0; i<60*23+59; i++){
            answer = Math.max(answer, map.getOrDefault(i, 0));
        }

        return answer;
    }
}

 

후기

 

시간 관련 문제는 포맷에 얽매이면 힘든거 같다. 이렇게 숫자로 풀 수 있는지 고민해보자

'프로그래머스' 카테고리의 다른 글

LV2 - 미로 탈출  (0) 2024.07.04
LV2 - 무인도 여행 (Java)  (0) 2024.07.03
LV2 - 전력망을 둘로 나누기 (Java)  (0) 2024.07.02
LV2 - 마법의 엘레베이터 (Java)  (0) 2024.06.29
LV2 - 소수 찾기 (Java)  (0) 2024.06.27