Written

프로그래머스 / 호텔 대실 / C++ 본문

알고리즘 문제풀이

프로그래머스 / 호텔 대실 / C++

steeringhead 2023. 8. 28. 20:30

지속적으로 sort를 사용해서 현재 저장되어 있는 객실들을, 마감 시간 기준으로 정렬해줘야 필요한 방의 갯수를 정확히 셀수 있습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
 
using namespace std;
 
//정렬부터
 
struct Task
{
    string sT;
    string eT;
    Task (string x,string y)
    {
        sT = x;
        eT = y;
    }
    
    bool operator<(const Task& other) const
    {   
        if (stoi(sT.substr(0,2)) != stoi(other.sT.substr(0,2)))
            return stoi(sT.substr(0,2)) < stoi(other.sT.substr(0,2));
        else
            return stoi(sT.substr(3,5)) < stoi(other.sT.substr(3,5));
    }
};
 
bool cmp(const pair<int,string>& x,const pair<int,string>& y)
{
    if (stoi(x.second.substr(0,2)) != stoi(y.second.substr(0,2)))
            return stoi(x.second.substr(0,2)) < stoi(y.second.substr(0,2));
    else
        return stoi(x.second.substr(3,5)) < stoi(y.second.substr(3,5));
}
 
int solution(vector<vector<string>> book_time) {
    vector<Task> v;
    for (int i = 0; i < book_time.size(); i++)
    {
        v.push_back(Task(book_time[i][0], book_time[i][1]));
    }
    sort(v.begin(), v.end());
 
    vector<pair<int, string>> sub;
 
    for (int i = 0; i < v.size(); i++)
    {
        if (sub.empty())
        {
            sub.push_back({ 1,v[i].eT });
        }
        else
        {
            for (int j = 0; j < sub.size(); j++)
            {
                int sTmp = stoi(v[i].sT.substr(02)) * 60 + stoi(v[i].sT.substr(35));
                int eTmp = stoi(sub[j].second.substr(02)) * 60 + stoi(sub[j].second.substr(35));
                if (eTmp + 10 > sTmp)
                {
                    sub.push_back({ sub.size() + 1,v[i].eT });
                    break;
                }
                else
                {
                    sub[j].second = v[i].eT;
                    break;
                }
            }
            sort(sub.begin(), sub.end(), cmp);
        }
        
    }
 
    return sub.size();
}
cs
Comments