[Programmers] [1차] 추석 트래픽
Date:
[Programmers] [1차] 추석 트래픽
Problem URL : [1차] 추석 트래픽
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<string> lines) {
int answer = 0;
vector<int> start, end;
for(int i = 0; i < lines.size(); i++) {
int h = stoi(lines[i].substr(11, 2)) * 3600 * 1000;
int m = stoi(lines[i].substr(14, 2)) * 60 * 1000;
float s = stof(lines[i].substr(17, 6)) * 1000;
int process = stof(lines[i].substr(24, 5)) * 1000;
start.push_back(h + m + s - process + 1); //시작 시간과 끝 시간 포함
end.push_back(h + m + s);
}
for(int i = 0; i < lines.size(); i++) {
// 정확히 완료시점부터 1초동안 계산하는 것이 각 로그별 최대 처리량이다.
int end_time = end[i] + 1000;
int count = 0;
for(int j = i; j < lines.size(); j++)
{
if(start[j] < end_time)
count++;
}
if(answer < count)
answer = count;
}
return answer;
}
Comments
int s = stof(lines[i].substr(17, 6)) * 1000;
이렇게 하면 틀린 경우가 생긴다. (ex lines[i].substr(17, 6) 가 4.002 일 때)
원인은 stof가 오차가 있는 상태로 실수로 변환해주고, int는 소수점 자리를 버림하기 떄문이다.
float x = stof("4.002");
float y = 4.002;
이 경우에는 x==y 가 true이고
float x = stof("4.002") * 1000;
float y = 4.002 * 1000;
이 경우에는 false이다. 출력하면 둘다 4002로 나오지만 int로 형변환하면 x는 4001, y는 4002가 나온다.
댓글