C++:: 프로그래머스 <호텔 대실>

jahlee·2023년 3월 9일
0

프로그래머스_Lv.2

목록 보기
4/106
post-thumbnail

호텔의 방의 최소 필요 개수를 구하는 문제이다. 단순히 곂치는 시간을 고려해 풀면 된다.

#include <string>
#include <vector>

using namespace std;

int my_stoi(string s)//시간을 정수형으로 변환 12:30 => 1230
{
    int ans = 0;
    for(int i=0;i<5;i++)
        if(isdigit(s[i])) ans = ans * 10 + s[i] - '0';
    return ans;
}

int solution(vector<vector<string>> book_time)
{
    int answer = 0, room[2410]={0,};// 0000 ~ 2409 까지인 이유는 마지막 대실 종료 시간(2359) + 청소시간 때문이다. 
    int n = book_time.size();
    for(int i=0;i<n;i++)
    {
        int s = my_stoi(book_time[i][0]), e = my_stoi(book_time[i][1]) + 10;
        if(e % 100 >= 60) e += 40;// 60분부터 시간을 늘려주어야 하기때문에
        for(int j=s;j<e;j++) room[j]++;
    }
    for(int i=0;i<2400;i++) answer = max(answer, room[i]);//가장 큰값이 곂치는 시간대의 필요 방 개수이다.
    return answer;
}

위의 코드에서는 stoi를 따로 구현했지만 바로 내장함수를 사용할 수 도 있다.

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<string>> book_time)
{
    int answer = 0, room[2410]={0,};
    int n = book_time.size();
    for(int i=0;i<n;i++)
    {
        int s = stoi(book_time[i][0].substr(0,2))*100 + stoi(book_time[i][0].substr(3));
        int e = stoi(book_time[i][1].substr(0,2))*100 + stoi(book_time[i][1].substr(3)) + 10;
        if(e % 100 >= 60) e += 40;
        for(int j=s;j<e;j++) room[j]++;
    }
    for(int i=0;i<2400;i++) answer = max(answer, room[i]);
    return answer;
}

0개의 댓글