본문 바로가기
알고리즘 풀이/프로그래머스

[프로그래머스] 호텔 대실(Java)

by char_lie 2024. 5. 1.
반응형

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

 

프로그래머스

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

programmers.co.kr

호텔 대실 문제

호텔에 방이 몇개 필요한지 찾는 문제

 

#사용 알고리즘

정렬(Sort)

반응형

📌문제 접근 포인트

1. 시작하기전에 문자열로 주어진 시간 값을 int 타입으로 바꿔주자. 이때, 전부 분으로 맞춰주면 계산하기 편하다.

2. 숫자로 바꾸었다면 시작 시간을 기준으로 정렬해주자. 순차적으로 찾아야 저장된 값에 대해서 오류가 발생하지 않는다.

3. 예약시간을 탐색해나가면서 비교해보자. 현재 사용중인 방에 대해서 예약할 수 있는 방이 있다면(현재 끝 시간 + 10분) 시작시간으로 바꾸고, 그런 방이 탐색했을 때 없으면 방을 새로 추가해주는 형태로 구성해주면 된다.

⚙ 내가 푼 정답 코드

import java.util.*;

class Solution {
    public static int timer(String t){
        String[] time = t.split(":");
        int h = Integer.parseInt(time[0]);
        int m = Integer.parseInt(time[1]);
        return h*60 + m;
    }
    
    public int solution(String[][] book_time) {
        ArrayList<Integer> room = new ArrayList<>();
        int n = book_time.length;
        int[][] books_time = new int[n][2];
        for (int i = 0 ; i < n; i++){
            books_time[i][0] = timer(book_time[i][0]);
            books_time[i][1] = timer(book_time[i][1]);
        }
        Arrays.sort(books_time, (a,b) -> a[0] - b[0]);
        
        for (int[] book : books_time){
            int start = book[0];
            int end = book[1];
            boolean flag = true;
            for(int i = 0; i < room.size(); i++){
                if(room.get(i) + 10 <= start){
                    room.set(i, end);
                    flag = false;
                    break;
                }
            }
            if(flag){
                room.add(end);
            }
        }
        
        return room.size();
    }
}

 

반응형

댓글