[프로그래머스] 호텔 대실 JAVA

atdawn·2024년 11월 27일

Algorithm

목록 보기
6/7

문제

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

문제 해결

  1. "시간:분" 형식을 '분'으로 변환하여 int배열에 저장
  2. 시작 시간이 빠른 순으로 정렬 : 같다면 종료 시간이 빠른 순
  3. 배정된 객실(list)들을 순서대로 방문하여 예약이 가능하다면 종료 시간 덮어쓰기
  4. 배정된 객실들의 사이즈가 곧 정답!




해당 예제는 최종 list의 사이즈가 3이므로 필요 객실 수는 3이다!

코드

import java.util.*;

class Solution {
    public int solution(String[][] book_time) {
        int answer = 0;
        
        int[][] intBT = new int[book_time.length][2]; //시간을 분 단위로 저장할 배열
        
        int idx=0;
        for(String[] bt:book_time){
            
            //시작 시간
            String[] time=bt[0].split(":");
            intBT[idx][0]=Integer.parseInt(time[0])*60;
            intBT[idx][0] += Integer.parseInt(time[1]);
            
            //종료 시간
            time = bt[1].split(":");
            intBT[idx][1] = Integer.parseInt(time[0])*60;
            intBT[idx][1] += Integer.parseInt(time[1]) + 10 ; //청소 시간
            
            idx++;
        }
        
        // 시작 시간 빠른 순 정렬
        Arrays.sort(intBT, (a, b) -> {
            if (a[0] != b[0]) {
                return Integer.compare(a[0], b[0]); // 첫 번째 열 기준
            } else {
                return Integer.compare(a[1], b[1]); // 두 번째 열 기준
            }
        });
        
        List<int[]> list = new ArrayList<>(); // 방 list
        for(int ibt[] : intBT){
            int start = ibt[0];
            int end = ibt[1];
            
            boolean b = false;
            for(int i = 0; i< list.size() ; i++){ //현재 스케줄이 있는 방들 루프
                if(list.get(i)[1]<=start){ //이전 방의 종료 시간 <= 지금 방 시작 시간
                    list.get(i)[1]=end; //종료 시간 덮어쓰기
                    b=true;
                    break;
                }
            }
            if(!b){ //들어갈 방이 없다면
                list.add(new int[]{start,end});
            }
        }

        answer = list.size();
        
        return answer;
    }
}
profile
복습 복습 복습

0개의 댓글