프로그래머스

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

programmers.co.kr

 

각 분마다 몇 개의 객실이 존재해야하는지 구하는 방식으로 접근했다.

 

 

1.  room[1450]을 선언하고 0으로 초기화. 청소시간을 고려해서 1440 + 10을 하였다.

2. 각 예약의 대실 시작 시간과 대실 종료 시간 + 청소 시간을 분으로 구함

3. 위의 두 값 사이의 수를 인덱스로 가지는 요소들의 값을 증가

4. room 배열의 최댓값을 리턴

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<string>> book_time) {
    int answer = 0, room[1450] = {0, }; //24*60 + 10 = 1450
    
    for(int i = 0; i < book_time.size(); i++) {
    	//대실 시작 시간을 분으로 전환
        int reserveStart = stoi(book_time[i][0].substr(0, 2)) * 60 + stoi(book_time[i][0].substr(3, 2));
        //대실 종료 시간 + 청소 시간을 분으로 전환
        int reserveEnd = stoi(book_time[i][1].substr(0, 2)) * 60 + stoi(book_time[i][1].substr(3, 2)) + 10;
        
    	//대실 시작 시간부터 종료 시간까지 room배열의 값을 증가
        for(int time = reserveStart; time < reserveEnd; time++) {
            room[time]++;
        }
    }
    
    //room 배열 안의 가장 큰 값이 필요한 최소 객실 수
    for(int num : room)
        if(num > answer) answer = num;
    
    return answer;
}

+ Recent posts