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

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

by KDW999 2023. 5. 30.

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

 

프로그래머스

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

programmers.co.kr

 

문제 접근

입실 시간 정렬, 들어갈 수 있는지 없는지 true, false로 비교해보는 등 생각이 떠오른 건 있지만 정답으로의 접근이 수월치 않았다.

 

누적합을 이용하여 배열에서 인덱스가 누적된 횟수만큼 방 갯수를 return 해주는 방법으로 푼 방법이 있더라

 

이 분 풀이를 보면 그림으로도 설명되있어서 이해하기 편하다.

https://ksb-dev.tistory.com/269

 

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

누적합 문제입니다. 일반적으로 배열에 공간이 비어있는지 확인하기 위해서 0과 0이 아닌 숫자를 사용합니다. 0은 비어있다는 뜻이고, 0이 아니면 공간이 차 있다는 뜻입니다. [3, 7]까지 배열로

ksb-dev.tistory.com

 

다른 사람 풀이

import java.util.*;

class Solution {
	static int maxTime = 1450;
	static int hour = 60;
	static int cleanTime = 10;
	
	public int solution(String[][] book_time) {
        int answer = 0;
        
        int[] room = new int[maxTime];
        
        for(String[] time : book_time) {
        	String checkIn = time[0];
        	String checkOut = time[1];
        	
        	room[calTime(checkIn)] += 1;
        	room[calTime(checkOut)+ cleanTime] += -1;
        }
        
        for(int i=1; i<maxTime; i++) {
        	room[i] += room[i-1];
        	answer = Math.max(answer, room[i]); // 최대로 누적된 수 만큼 방이 필요
        }
        
        return answer;
    }
	
	public static int calTime(String time) {
		String[] split = time.split(":"); // 입실, 퇴실 시간 쪼개기
		String h = split[0];
		String m = split[1];
		return (Integer.parseInt(h) * hour) + Integer.parseInt(m);
	}
}

댓글