호텔 대실 문제

개굴이·2023년 9월 6일
0

코딩테스트

목록 보기
6/58
post-thumbnail

프로그래머스 호텔 대실

string[][] book_time을 int로 변환하여
string.replace()
hashMap<입실, 퇴실>에 넣는다.
입실을 기준으로 sort => keySet(입실 시간)

List<> room(퇴실 시간) 하나 생성 첫번째 퇴실 넣는다.
두번째 입실 + 10(분) 이 퇴실보다 크면 해당 room에 넣는다.
보다 작으면 room 하나 생성하고 퇴실 넣는다.

~반복(퇴실 빠른 room부터 확인해야 함 => sort)

생성된 room개수 반환_result

import java.util.*;

class Solution {
    public int solution(String[][] book_time) {
        HashMap<Integer, Integer> inAndOut = new HashMap<>();
        int number = 1000;//HashMap으로 만들어 버려서 급히 추가함
        
        for(String[] book : book_time) {
            int in = Integer.parseInt(book[0].replace(":", "") + number++);
            int out = Integer.parseInt(book[1].replace(":", ""));
            
            inAndOut.put(in, out);
        }
        
        List<Integer> keySet = new ArrayList<>(inAndOut.keySet());
        Collections.sort(keySet);
        
        List<Integer> rooms = new ArrayList<>();
        for(int key : keySet) {
            if(rooms.isEmpty()) {//첫번째 예약 처리
                rooms.add(inAndOut.get(key));
                continue;
            }
            Collections.sort(rooms);//일찍 비는 방부터 확인
            int roomSelected = -1;
            for(int room : rooms) {
                if(room % 100 >= 50 ? room + 50 <= key / 10000 : room + 10 <= key / 10000) {//종료 10분 후
                    roomSelected = room;
                    break;
                }
            }
            if(roomSelected == -1) {//해당하는 방이 존재하지 않음
                rooms.add(inAndOut.get(key));
                continue;
            }
            else
                rooms.set(rooms.indexOf(roomSelected), inAndOut.get(key));//퇴실시간으로 업데이트
        }
        
        int answer = rooms.size();
        return answer;
    }
}

입실 시간 중복 고려하지 않고 HashMap으로 만들어버린 부분, 시간 계산 부분 수정해야겠다.

0개의 댓글