본문 바로가기
코딩테스트!(프로그래머스 & 백준)/프로그래머스-C++

코딩테스트 -- 호텔 대실 - (프로그래머스 / C++)

by Lee_story_.. 2024. 3. 6.
728x90

 

 

 

프로그래머스

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

programmers.co.kr

 

 

문제요약!


시간대별로 호텔 대실 시간들을 리스트로 주고 최소객실수를 구하는 문제입니다. 

 

시간은 

{ {"09:10", "10:10"},{"10:20", "12:20"}} 식으로 주어지기에 

 

분단위로 배열을 할당해 주어 풀어주면 쉽게 풀 수 있었습니다. 

 

+++

예약시간들도 하루동안의 내용들이고 

 

- 예약 시각이 자정을 넘어가는 경우는 없다

라는 조건도 포함되어 있어 예외없이 풀어낼 수 있었습니다. 

 


 

그럼 바로 코드 시작!

 

아래처럼 먼저 하루 전체 1440분의 배열을 생성해주엇습니다. 

int solution(vector<vector<string>> book_time) { 
 // 제일 많이 겹치는 부분을 찾으면 될것
    //예약시간으 24 *60개인가?
    // 1440개의 갯수만 세면되는거 아닌가?

    int answer = 0;

    int Time[1441];
    fill(Time, Time + 1441, 0);
    
    
    
    ...

 

 

 

그 후 "** : **" 에서 시간과 분을 분리하여

시작시각(분)과 청소를 마친 시각(분) 사이에 포함되는 시간대의 배열에 +1 씩 해주었습니다. 

...


for (vector<string> i : book_time) {
        string StartTime = i[0];
        string EndTime = i[1];
        


        int Startmin = stoi(StartTime.substr(0, 2)) * 60 + stoi(StartTime.substr(3, 2));
        int EndMin = stoi(EndTime.substr(0, 2)) * 60 + stoi(EndTime.substr(3, 2)) + 9;

        for (int i = Startmin; i <= EndMin; i++) {
            Time[i] += 1;
        }
    }

 

이렇게 되면 각 배열에 해당하는 분에 호텔에 예약한 사람들의 수를 측정할 수 있습니다. 

 

 

 

이제 마지막으로 여기서 최댓값들을 세어주면 끝!

    for (int i : Time) {
        answer = max(answer, i);
    }

    return answer;

 

 

 

2단계문제인 만큼 쉽게 풀어낼 수 있었습니다.

 

 

 

틀린점이 있다면 댓 달아주세요!

댓글