#include <string>
#include <vector>
using namespace std;
//초당 최대 처리량은 1초간의 최대개수
int solution(vector<string> lines) {
int answer = 0;
vector<pair<double, double>> hms; //시작시간 끝시간
//날짜를 초로 바꿔준다.
for(int i = 0; i < lines.size(); i++)
{
double endTime = stod(lines[i].substr(11, 2)) * 3600; //h
endTime += stod(lines[i].substr(14, 2)) * 60; //m
endTime += stod(lines[i].substr(17, 2)); //s
endTime += stod(lines[i].substr(20, 3)) * 0.001; //ss
double startTime = endTime - stod(lines[i].substr(24, lines[i].size() - 1)) + 0.001; //처리시간
hms.push_back({startTime, endTime});
}
//1초간의 처리구간 계산
for(int i = 0; i < hms.size(); i++)
{
int counts = 1;
double end = hms[i].second + 1;
for(int j = i + 1; j < hms.size(); j++)
{
double start = hms[j].first;
if (start < end)
counts++;
}
answer = max(answer, counts);
}
return answer;
}
풀이
1. 날짜는 2016년 9월 15일로 고정이니 계산에서 제외한다.
2. 시간은 01:00:04.001으로 단위가 고정되어 있으므로 substr을 사용하여 단위별로 가져온다.
3. 시간을 초단위로 바꾸어 계산한다.
4. 해당초는 끝난 시간이므로 뒤로 들어오는 2.0s와 같은 초를 빼준다. (시작시간을 구한다.)
5. 처리시간은 시작시간과 끝시간을 포함하므로 빼준 값에서 0.001을 더해준다.
6. 1초간의 처리구간을 계산한다.
7. 끝시간에서 +1을 하여 최대한 끝부분에서부터 1초를 계산해준다.
8. 그 안에 있는 판단은 끝 시간이 오름차순으로 정렬되어있기 때문에 끝시간 +1보다 시작시간이 작으면 된다.
https://programmers.co.kr/learn/courses/30/lessons/17676
'Algorithm > Programmers' 카테고리의 다른 글
[C++] 프로그래머스 행렬 테두리 회전하기 (0) | 2021.11.17 |
---|---|
[C++] 프로그래머스 N-Queen 재귀 (0) | 2021.11.15 |
[C++] 프로그래머스 N으로표현 DP (0) | 2021.11.04 |
[C++] 프로그래머스 섬 연결하기 프림알고리즘 (0) | 2021.10.17 |
[C++] 프로그래머스 구명보트 탐욕법 (0) | 2021.10.12 |