728x90
추석 트래픽
문제 설명
주어지는 로그 문자열의 구성은 다음과 같다.
"2020-09-15 18:03:00.000 2.000s"
날짜 종료 시간 처리 시간"
로그 문자열들을 이용하여 로그들이 1초동안 처리할 수 있는 최대 처리량을 구하는 문제이다.
문제 풀이
소스코드 : C++
1. 주어지는 로그 문자열(line)을 공백 단위로 스플릿한다.
2. 종료시간(res[1])을 ms 단위로 변환아여 end_time에 저장
3. 시작시간을 구하기 위해 처리시간(res[2])를 ms단위로 변환한다.
4. start_time에 end_time - duration_time +1하여 시작시간을 저장
5. 시작시간과 종료시간을 records에 저장
6. records에 저장된 시간정보를 n * (n-1) 만큼 탐색하여 결과를 구한다.
7. 기준시간 하나를 카운트하고, 이 후 시간정보를 탐색하여 그 시간정보의 시작 시간이 기준시간 + 1안에 들면 cnt+1해준다.
8. answer에 cnt와 answer를 최댓값 갱신해준다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int time_to_sec(const string time) {
int h = stoi(time.substr(0, 2));
int m = stoi(time.substr(3, 2));
int s = stoi(time.substr(6, 2));
int ms = stoi(time.substr(9, 3));
m += h * 60;
s += m * 60;
ms += s * 1000;
return ms;
}
int duration_to_sec(string duration) {
duration.erase(duration.end() - 1);
float time = stof(duration);
int sec = time * 1000;
return sec;
}
int solution(vector<string> lines) {
int answer = 0;
vector<pair<int, int>> records;
for (string line : lines) {
vector<string> res;
string tmp = "";
for (int i = 0; i <= line.size(); i++){
if (line[i] == ' ' || !line[i]){
res.push_back(tmp);
tmp = "";
}
else tmp +=line[i];
}
int end_time = time_to_sec(res[1]);
int begin_time = end_time - duration_to_sec(res[2]) + 1;
records.push_back(make_pair(begin_time, end_time));
}
for (int i = 0; i < records.size(); i++) {
int cnt = 1;
int endTime = records[i].second;
for (int j = i + 1; j < records.size(); j++) {
if (records[j].first < endTime + 1000) {
cnt++;
}
}
answer = max(cnt, answer);
}
return answer;
}
728x90
300x250